这是我的弹出窗口:
<Popup Name="Tedavi_Popup" IsOpen="False" Placement="MousePoint" >
<Border BorderBrush="Gray" BorderThickness="1" >
<TextBlock Background="WhiteSmoke" Padding="9,4,9,4" TextWrapping="Wrap" Name="popup"/>
</Border>
</Popup>
我有主网格和网格中的所有内容。
这是我的MouseMove
事件处理程序:
this.Tedavi_Popup.ClearValue(Popup.IsOpenProperty);
this.Tedavi_Popup.IsOpen = true;
我想让网格中的弹出窗口一直打开,并让Popup跟随鼠标。
目前,鼠标移动时不会显示弹出窗口。当鼠标停止时,弹出窗口会出现在鼠标底部。鼠标停止时一切正常。但鼠标移动它并没有出现。
如何在鼠标移动时显示它?
答案 0 :(得分:3)
由于MouseMove
事件在鼠标移动时会快速触发,因此弹出窗口不会在下一次移动发生之前重新绘制在屏幕上。这就是为什么它在鼠标移动时似乎没有显示出来的原因。
为了达到您想要的效果,您需要明确地放置弹出窗口,而不是使用MousePoint
展示位置。
以下是如何做到这一点:
为窗口/控件的主容器命名。在下面的示例中,我使用Window
,我将其命名为myWindow
。您可以选择使用Grid
,只要它填充了您希望捕获鼠标移动的表面区域。
将弹出式广告集Placement
更改为PlacementMode.Relative
,将PlacementTarget
设置为主要容器,并设置HorizontalOffset
和{{1} } VerticalOffset
。
在主控件上设置0
事件处理程序,并在该处理程序中,获取鼠标相对于主控件的当前位置,并使用它来设置MouseMove
和HorizontalOffset
值:
所以你最终得到的XAML看起来像这样:
VerticalOffset
你的代码看起来像这样:
<Window x:Class="WpfApp2.MainWindow" MouseMove="popup_MouseMove" Name="myWindow">
<Grid>
<Popup Name="Tedavi_Popup" IsOpen="False" Placement="Relative" HorizontalOffset="0" VerticalOffset="0" PlacementTarget="{Binding ElementName=myWindow}">
<Border BorderBrush="Gray" BorderThickness="1" >
<TextBlock Background="WhiteSmoke" Padding="9,4,9,4" TextWrapping="Wrap" Name="popup" />
</Border>
</Popup>
</Grid>
</Window>