gpt4 book ai didi

c# - WPF 弹出跟随鼠标

转载 作者:行者123 更新时间:2023-11-30 20:27:56 25 4
gpt4 key购买 nike

这是我的弹出窗口:

<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;

我想让弹出窗口在网格中始终打开,并让弹出窗口跟随鼠标。

目前,鼠标移动时不会出现弹窗。当鼠标停止时,弹出窗口出现在鼠标底部。鼠标停止时一切正常。但是鼠标移动它不会出现。

如何让它在鼠标移动时出现?

最佳答案

由于 MouseMove 事件在鼠标移动时快速触发,因此在下一个移动发生之前弹出窗口不会在屏幕上重新绘制。这就是为什么它在鼠标移动时似乎没有显示的原因。

要达到您想要的效果,您需要明确放置弹出窗口而不是使用 MousePoint 放置。

以下是您可以执行此操作的方法:

  • 为窗口/控件的主容器命名。在下面的示例中,我使用的是 Window,我将其命名为 myWindow。您可以选择使用 Grid,只要它填满您希望捕获鼠标移动的表面区域即可。

    • 这使您可以在下一步中定位它。
  • 将popup的设置Placement更改为PlacementMode.Relative,设置PlacementTarget为主容器,设置 Horizo​​ntalOffsetVerticalOffset0

    • 这会将弹出窗口的位置设置到主容器的左上角,然后我们将在事件处理程序中更改它。
  • 在主控件上设置 MouseMove 事件处理程序,并在该处理程序中获取鼠标相对于主控件的当前位置,并使用它来设置 Horizo​​ntalOffsetVerticalOffset 值:

    • 这实际上使弹出窗口与鼠标光标对齐,而无需重新绘制它。

所以你最终得到的 XAML 看起来像这样:

<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>

你的代码看起来像这样:

private void popup_MouseMove(object sender, MouseEventArgs e)
{
if (!this.Tedavi_Popup.IsOpen)
this.Tedavi_Popup.IsOpen = true;

var mousePosition = e.GetPosition(this.myWindow);
this.Tedavi_Popup.HorizontalOffset = mousePosition.X;
this.Tedavi_Popup.VerticalOffset = mousePosition.Y;

}

关于c# - WPF 弹出跟随鼠标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48083417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com