UWP 键盘加速器 FN 问题

UWP Keyboard Accelerator FN issue

<Button
    x:Name="PlayButton"
    Click="PlayButton_Click"
    Style="{StaticResource MediaControlButtonStyle}">
    <Button.Content>
        <FontIcon
            x:Name="PlayButtonIcon"
            FontSize="30"
            Glyph="&#xE768;" />
    </Button.Content>
    <Button.KeyboardAccelerators>
        <KeyboardAccelerator Key="F3" />
    </Button.KeyboardAccelerators>
</Button>

我想使用 F3 play/pause 我的 UWP 应用程序中的音乐。但是,仅按 F3 在我的 Surface Book 2 上不起作用。我需要同时按下 FN 和 F3 才能使其正常工作。我应该怎么做才能只按F3? Microsoft 内置的 UWP 应用程序 Groove Music 仅通过按 F3 即可正常播放和暂停。

还有一个问题,UWP应用程序window最小化后,如何还能使用快捷键呢? Groove 的键盘控件在 window 最小化的情况下仍然有效。

貌似是需要按FN还是不按FN的行为,与安装app.When的设备有关,我运行在PC上,我只需要按F3,但是需要surface.If 上的 FN 你仍然想更改它,我在下面有一个解决方法,你可以在页面(例如 MainPage)上注册加速器事件。

public MainPage()
        {​
            this.InitializeComponent();​
            Window.Current.Dispatcher.AcceleratorKeyActivated += AccelertorKeyActivedHandle;​
        }

private void AccelertorKeyActivedHandle(CoreDispatcher sender, AcceleratorKeyEventArgs args)
        {​
            if (args.EventType.ToString().Contains("Down"))​
            { ​
                    if (args.VirtualKey == Windows.System.VirtualKey.F3)​
                    {​
                        // do something you want
​
                    }​
            }​
        }

当UWP app的window最小化时,当前window没有焦点,所以设置的快捷键不会responded.But系统有默认的快捷键(如Fn + F11) 可以播放或暂停 media.If 要响应系统快捷键,需要允许 backgroundMediaPlayback.You 可以试试 official demo,也可以通过自带的媒体按钮控制键盘。

更新:

按照官方的例子,如果要使用MediaElement播放,需要设置MediaPlay和MediaPlaybackList绑定播放list.In这种情况,好像可以通过系统默认的快捷方式控制keys.What实际工作是MediaPlayer.For更详细的资料,还是要看官方demo。

XAML:

<MediaElement Name="mediaPlayerElement" 
                            AreTransportControlsEnabled="True" ​ 
                            Stretch="UniformToFill" Height="100" Width="400">

代码隐藏:

private void MainPage_Loaded(object sender, RoutedEventArgs e)
        {​
            var source = MediaSource.CreateFromUri(new Uri("ms-appx:///Assets/xxx"));​
​
            // Create a configurable playback item backed by the media source​
            var playbackItem = new MediaPlaybackItem(source);​
            MediaPlayer player = new MediaPlayer();​
            MediaPlaybackList lists = new MediaPlaybackList();​
            lists.Items.Add(playbackItem);​
            player.Source = lists;​
​
        }