【发布时间】:2017-06-22 01:16:35
【问题描述】:
我正在使用以下代码在 WPF 中测试 Popup 控件
<Window x:Class="Popup1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Popup1"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="250">
<Grid>
<TextBlock TextWrapping="Wrap">You can use a popup to provide a link for a specific
<Run TextDecorations="Underline" MouseEnter="ContentElement_OnMouseEnter">
term
</Run>
</TextBlock>
<Popup Name="popLink" StaysOpen="False" Placement="Mouse" MaxWidth="200"
PopupAnimation="Slide" AllowsTransparency="True">
<Border>
<TextBlock Margin="10" TextWrapping="Wrap">
For more information, see
<Hyperlink NavigateUri="http://en.wikipedia.org/wiki/Term" Click="Hyperlink_OnClick">Wikipedia</Hyperlink>
</TextBlock>
</Border>
</Popup>
</Grid>
</Window>
和处理程序
private void ContentElement_OnMouseEnter(object sender, MouseEventArgs e) {
popLink.IsOpen = true;
}
private void Hyperlink_OnClick(object sender, RoutedEventArgs e) {
Process.Start(((Hyperlink) sender).NavigateUri.ToString());
}
结果是一个包含textblock 的普通窗口,其中包含指向弹出控件的链接,当鼠标悬停在指向弹出窗口的链接上时,该控件会直观地出现。
正常行为是弹出窗口保持可见直到鼠标单击。只要鼠标点击不在弹出窗口的链接上,它就可以正常工作
当我在弹出窗口的链接上单击鼠标时会发生我无法解释的奇怪行为。然后,弹出窗口关闭(如预期的那样)但当鼠标悬停在链接上时它再也不会出现(应该) .
你能解释一下这种行为吗?
【问题讨论】:
-
对我来说,当
popup.IsOpen已经是true但弹出窗口由于某种原因不可见时会发生这种情况。 -
查看相关:stackoverflow.com/questions/24491382/invisible-opened-popup 所以在弹出窗口关闭和鼠标进入弹出窗口下方的文本块之间似乎存在竞争条件(因为它正在关闭),所以它会再次设置
IsOpen=true而弹出关闭尚未完成。 (只是我对正在发生的事情的假设)