在WPF中,我可以轻松测试鼠标是否超过UIElement
:
System.Windows.UIElement el = ...;
bool isMouseOver = el.IsMouseOver;
我想在WinRT中做同样的事情,但IsMouseOver
似乎没有等同于Windows.UI.Xaml.UIElement
。
Windows.UI.Xaml.UIElement el = ...;
bool isPointerOver = ???
作为一种解决方法,我可以为PointerEntered和PointerExited事件添加两个处理程序,但我正在寻找更直接的解决方案。
答案 0 :(得分:1)
在uwp中,UIElement
没有名为IsPointerOver
的媒体资源。但是如您所知,它具有PointerEntered
和PointExited
的事件句柄。我们可以自定义元素并定义新属性IsPointerOver
并包装这些事件。例如,我使用IsPointerOver
属性包装自定义控件,如下所示:
class NewButton : Button
{
public static readonly DependencyProperty IsPointOverProperty = DependencyProperty.Register(
"IsPointerOver", typeof(bool), typeof(NewButton), new PropertyMetadata(false));
public bool IsPointOver
{
get { return (bool)GetValue(IsPointOverProperty); }
set { SetValue(IsPointOverProperty, value); }
}
protected override void OnPointerEntered(PointerRoutedEventArgs e)
{
base.OnPointerEntered(e);
IsPointOver = true;
}
protected override void OnPointerExited(PointerRoutedEventArgs e)
{
base.OnPointerExited(e);
IsPointOver = false;
}
}
更多详情请参阅this thread。但这并不适合所有UI元素。
因此,对于另一种方法,您可以调用VisualTreeHelper.FindElementsInHostCoordinates方法,该方法可以确定给定Name的元素是否存在于应用程序UI中Point处的z顺序中的任何位置。您可以获取鼠标指针的坐标并调用此方法来判断元素是否指向上方。有关如何获取鼠标指针的位置,请参考BasicInput官方样本的方案2。
答案 1 :(得分:0)
在UWP中,使用PointerRoutedEventArgs.GetCurrentPoint(UIElement)获取相对于指定元素左上角的指针位置。假设您的UIElement是矩形的,则可以测试该点的X和Y> = 0和