Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows runtime 测试指针是否位于UIElement上_Windows Runtime_Windows 10 Universal - Fatal编程技术网

Windows runtime 测试指针是否位于UIElement上

Windows runtime 测试指针是否位于UIElement上,windows-runtime,windows-10-universal,Windows Runtime,Windows 10 Universal,在WPF中,我可以轻松测试鼠标是否位于UIElement上: 我想在WinRT中也这样做,但是对于Windows.UI.Xaml.UI元素,似乎没有与IsMouseOver等效的东西 作为一种解决方法,我可以为PointerEntered和PointerExit事件添加两个处理程序,但我正在寻找更直接的解决方案。在uwp中,没有名为IsPointerOver的属性。但正如您所知,它有PointerEntered和PointExited的事件句柄。我们可以自定义元素并定义新的propertyIsP

在WPF中,我可以轻松测试鼠标是否位于UIElement上:

我想在WinRT中也这样做,但是对于Windows.UI.Xaml.UI元素,似乎没有与IsMouseOver等效的东西

作为一种解决方法,我可以为PointerEntered和PointerExit事件添加两个处理程序,但我正在寻找更直接的解决方案。

在uwp中,没有名为IsPointerOver的属性。但正如您所知,它有PointerEntered和PointExited的事件句柄。我们可以自定义元素并定义新的propertyIsPointerOver和包装这些事件。例如,我使用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;
    }       
}
更多详情请参考。但这并不适用于所有UI元素


因此,通过另一种方式,您可以调用该方法,该方法可以确定给定名称的元素是否存在于应用程序UI中某个点的z顺序中的任何位置。您可以获取鼠标指针的坐标,并调用此方法来判断元素是否位于上方。有关如何获取鼠标指针位置,请参考官方示例的场景2。

在UWP中,使用PointerRoutedEventArgs.GetCurrentPoint UIElement获取相对于指定元素左上角的指针位置。假设UIElement是矩形的,您可以测试该点的X和Y是否>=0和<宽度/高度

上面的事件句柄是获取Ispointover状态的最简单方法。稍后我会根据你的情况提出其他建议供你参考。
Windows.UI.Xaml.UIElement el = ...;
bool 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;
    }       
}