XAML 如何检查是否有任何键被按下(仅限于前端)

m2xkgtsf  于 2023-04-27  发布在  其他
关注(0)|答案(1)|浏览(146)

我已经设计了一个.xamlx文件,这只是一个概述。如果按下任何键,我的NavigateBackCommand应该被执行。页面/网格上是否有类似“anyKeyPressed”的事件?我必须在.xamlx中,因为我不能(不允许)在后端更改某些内容。
类似于:

<Grid.Behaviors>
       <behaviors:EventHandlerBehavior EventName="anyKeyPressed">
        <behaviors:InvokeCommandAction Command="{Binding NavigateBackCommand}" />
       </behaviors:EventHandlerBehavior>
</Grid.Behaviors>
w8biq8rn

w8biq8rn1#

页面/网格上是否有类似“anyKeyPressed”的事件?
不幸的是,没有。对于移动的平台(Android/iOS),没有“anyKeyPressed”这样的事件,特别是对于物理键盘。
如果不考虑前端,您可以在UWP上实现它:
1.在共享项目中创建一个名为IKeyboardListener的接口:

namespace Forms2
{
    public interface IKeyboardListener
    {
    }
}

1.将以下内容添加到UWP的App.xaml.cs:

namespace Forms2.UWP
{
    sealed partial class App : Application, IKeyboardListener
    {
        ....
        protected override void OnLaunched(LaunchActivatedEventArgs e)
        {
           ....
           
           Windows.UI.Core.CoreWindow.GetForCurrentThread().KeyDown += HandleKeyDown;
        }

        public void HandleKeyDown(Windows.UI.Core.CoreWindow window, Windows.UI.Core.KeyEventArgs e)
        {
            MessagingCenter.Send<IKeyboardListener, string>(this, "KeyboardListener", e.VirtualKey.ToString());
        }

    }
}

1.在要执行return命令的页面上使用此命令:

namespace Forms2
{
    public partial class Page1 : ContentPage
    {
        public Page1()
        {
            InitializeComponent();

           MessagingCenter.Subscribe<IKeyboardListener, string>(this, "KeyboardListener", (sender, args) => {

               Debug.WriteLine(args);
                if (args!=null)
                {
                    Navigation.PopAsync();
                }

           });
        }
    }
}

如果按下任何键,您可以返回上一页。

相关问题