【发布时间】:2018-11-21 14:53:40
【问题描述】:
我有 XAML:
<Grid MouseMove="onMouseMove" >
<ItemsControl Name="btnTableImageList">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Content="{Binding Content}"
Height="{Binding Height}"
Width="{Binding Width}"
Tag="{Binding Tag}"
Margin="{Binding Margin}"
Background="{Binding Background}"
HorizontalAlignment="Center"
MouseDown="tblButton_MouseDown"
MouseUp="tblButton_MouseUp"
Click="ClickHandlerTableBtn"
TextBlock.TextAlignment="Center" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
以及后面的代码:
private void onMouseMove(object sender, MouseEventArgs e)
{
lblCoord.Content = Mouse.GetPosition(Application.Current.MainWindow);
}
表单上有一个名为lblCoord的Label,表单加载后创建了两个按钮。
我想在 lblCoord 中显示与网格相关的鼠标坐标,但只有当我将鼠标光标移到放置在该网格内的任何按钮上时才会显示坐标。
我的猜测是我将 MouseMove="onMouseMove" 放置在错误的位置。
感谢您的帮助。
【问题讨论】:
-
没有测试这个我知道WPF中的Button捕获了鼠标点击,它也可能捕获了MouseMove。我得测试看看。如果是这样,在 WPF 中,您可以使用最先捕获的 PreviewMouseMove。所以尝试使用 PreviewMouseMove 看看是否有效。事件从最外部的内容向下传送到内部,并且通常使用以 Preview 为前缀的事件引发。其他事件从最里面到外面冒泡,不包括 Preview 前缀。
-
PreviewMouseMove 也会发生同样的事情。仅当鼠标光标移过按钮并完全忽略网格或光标后面的任何其他内容时才会显示位置,除非它是按钮。
-
我将不得不在代码中使用它。按钮中的内容是什么?验证内容未捕获事件。只是扫描它是我的假设,但我不确定。如果 Grid 是透明的,则可能不会触发 MouseMove 事件,因为我知道您可以单击 WPF 中的透明度。如果这是一个透明度问题,您可以将背景设置为一种非常透明(但不完全)的颜色,您看不到它,但它仍然会记录点击。可能与 MouseMove 相同...
-
按钮是在运行时动态创建的,所以很多东西都是从数据库中加载的。但是对于测试,您可以将 XAML 按钮代码更改为 它的行为完全相同。