WPF,奇怪的Popup提示框

dfgb45898 2014-04-26 09:55:41

<Grid>
<Border Name="border" BorderThickness="1" Background="Red" Height="40" Width="60" MouseEnter="border_MouseEnter">
<Popup Name="pop1" StaysOpen="False">
<TextBlock Text="张三" Background="#FF9AF132"/>
</Popup>
</Border>
</Grid>


private void border_MouseEnter(object sender, MouseEventArgs e)
{
pop1.IsOpen = true;
}


此示例中,当鼠标进入到Border之后,Popup就会打开,由于提示框Popup 的StaysOpen属性值被设置为False,所以,在Popup打开的情形下,在Popup 之外的其他区域点一下鼠标,Popup 就会关闭。
但是,现在出现这么一个情况:如果在Popup 打开的情况下,鼠标单击一下Border,Popup关闭了,之后,如果鼠标再次进入Border,Popup却再也不打开了,请问,这是什么原因的呢?
...全文
1834 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
fdt34565 2014-05-23
  • 打赏
  • 举报
回复
帮顶......
dfgb45898 2014-05-07
  • 打赏
  • 举报
回复
关键是,点击border以内的地方,IsOpen应该变为False的啊,为什么不会变为false呢? StaysOpen属性为false时,点击Popup以外的地方,就会关闭的啊
dfgb45898 2014-05-07
  • 打赏
  • 举报
回复
关键是,点击border以内的地方,IsOpen应该变为False的啊,为什么不会变为false呢? StaysOpen属性为false时,点击Popup以外的地方,就会关闭的啊
dianjixue1 2014-05-06
  • 打赏
  • 举报
回复
在StaysOpen="False"的情况下,点击border以外的地方,IsOpen会自动变为False,此时pop1就消失了。 点击border以内的地方,IsOpen不会变为False,一直保持True,pop1还是消失了。所以之后再怎么让IsOpen=True,pop1都不会显示。 可以理解成此时被遮住了。但是在点击border以外的地方的时候,的确是关闭了。
dfgb45898 2014-05-06
  • 打赏
  • 举报
回复
引用 7 楼 Z65443344 的回复:
如果你能断点调试的话,查看一下点击其他控件之后pop1.IsOpen的值,看我说的对不对
你说的不对哦。我在Window的MouseLeftButtonDown事件末尾设置断点,在其它地方点击之后,pop1.IsOpen为false
dfgb45898 2014-05-06
  • 打赏
  • 举报
回复
引用 9 楼 dianjixue1 的回复:
在StaysOpen="False"的情况下,点击border以外的地方,IsOpen会自动变为False,此时pop1就消失了。 点击border以内的地方,IsOpen不会变为False,一直保持True,pop1还是消失了。所以之后再怎么让IsOpen=True,pop1都不会显示。 可以理解成此时被遮住了。但是在点击border以外的地方的时候,的确是关闭了。
关键是,点击border以内的地方,IsOpen应该变为False的啊,为什么不会变为false呢? StaysOpen属性为false时,点击Popup以外的地方,就会关闭的啊
於黾 2014-05-06
  • 打赏
  • 举报
回复
如果你能断点调试的话,查看一下点击其他控件之后pop1.IsOpen的值,看我说的对不对
於黾 2014-05-06
  • 打赏
  • 举报
回复
因为你在其他地方点击之后,pop1并不是自动关闭了,而是跑到其他控件后面去了 所以你再让它打开,它其实已经是打开的,而且已经在后面,所以看不到了. 你先让它关闭,再打开,就又跑到前面来了.
dsf40 2014-05-06
  • 打赏
  • 举报
回复
为什么要这么做呢?
dfgb45898 2014-05-06
  • 打赏
  • 举报
回复
引用 9 楼 dianjixue1 的回复:
在StaysOpen="False"的情况下,点击border以外的地方,IsOpen会自动变为False,此时pop1就消失了。 点击border以内的地方,IsOpen不会变为False,一直保持True,pop1还是消失了。所以之后再怎么让IsOpen=True,pop1都不会显示。 可以理解成此时被遮住了。但是在点击border以外的地方的时候,的确是关闭了。
关键是,点击border以内的地方,IsOpen应该变为False的啊,为什么不会变为false呢? StaysOpen属性为false时,点击Popup以外的地方,就会关闭的啊
dfgb45898 2014-04-28
  • 打赏
  • 举报
回复
引用 1 楼 yanran_hill 的回复:
[quote=引用 楼主 dfgb45898 的回复:]

private void border_MouseEnter(object sender, MouseEventArgs e)
{
    pop1.IsOpen = true;
}
修改一下:

private void border_MouseEnter(object sender, MouseEventArgs e)
{
    pop1.IsOpen = false;
    pop1.IsOpen = true;
}
有效果。可是,为什么要这么做呢?
g436by 2014-04-27
  • 打赏
  • 举报
回复
引用 1 楼 yanran_hill 的回复:
[quote=引用 楼主 dfgb45898 的回复:]

private void border_MouseEnter(object sender, MouseEventArgs e)
{
    pop1.IsOpen = true;
}
修改一下:

private void border_MouseEnter(object sender, MouseEventArgs e)
{
    pop1.IsOpen = false;
    pop1.IsOpen = true;
}
有效果。可是,为什么要这么做呢?
dfgb45898 2014-04-27
  • 打赏
  • 举报
回复
引用 1 楼 yanran_hill 的回复:
[quote=引用 楼主 dfgb45898 的回复:]

private void border_MouseEnter(object sender, MouseEventArgs e)
{
    pop1.IsOpen = true;
}
修改一下:

private void border_MouseEnter(object sender, MouseEventArgs e)
{
    pop1.IsOpen = false;
    pop1.IsOpen = true;
}
果然有效。可是,为什么要这么做呢?
yanran_hill 2014-04-27
  • 打赏
  • 举报
回复
[quote=引用 楼主 dfgb45898 的回复:]

private void border_MouseEnter(object sender, MouseEventArgs e)
{
    pop1.IsOpen = true;
}
修改一下:

private void border_MouseEnter(object sender, MouseEventArgs e)
{
    pop1.IsOpen = false;
    pop1.IsOpen = true;
}

111,076

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧