C# UWP键盘加速器FN问题

C# UWP键盘加速器FN问题,c#,xaml,uwp,keyboard-shortcuts,C#,Xaml,Uwp,Keyboard Shortcuts,我想使用F3在我的UWP应用程序中播放/暂停音乐。但是,简单地按F3键在我的Surface Book 2上不起作用。我需要同时按下FN和F3使其工作。我应该怎么做才能只按F3键?Microsoft内置UWP应用程序Groove Music仅按F3键即可播放和暂停音乐 另一个问题是,当UWP应用程序的窗口最小化时,我如何仍然使用键盘加速器?Groove的键盘控件仍然可以在最小化窗口的情况下工作。似乎需要按FN或不按FN的行为与安装应用程序的设备有关。当我在PC中运行时,我只需要按F3,但表面上需要

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

另一个问题是,当UWP应用程序的窗口最小化时,我如何仍然使用键盘加速器?Groove的键盘控件仍然可以在最小化窗口的情况下工作。

似乎需要按FN或不按FN的行为与安装应用程序的设备有关。当我在PC中运行时,我只需要按F3,但表面上需要FN。如果你仍然想更改它,我有一个解决方法,您可以在页面(例如主页)上注册加速器事件

当UWP应用程序的窗口最小化时,当前窗口没有焦点,因此设置的快捷方式将不会响应。但系统有其默认快捷方式(例如Fn+F11)可以播放或暂停媒体。如果您想响应系统快捷方式,则需要允许backgroundMediaPlayback。您可以尝试,也可以通过键盘随附的媒体按钮进行控制

更新

根据官方示例,如果要使用MediaElement进行播放,应该设置MediaPlay和MediaPlaybackList来绑定播放列表。在这种情况下,似乎可以通过系统默认的快捷键进行控制。真正起作用的是MediaPlayer。更多详细信息,您还需要阅读官方演示

XAML:


我很抱歉,但添加这段代码会使按F3或FN+F3失败…我不知道为什么。我实际上是想让默认的快捷方式来控制我的应用程序。这就是我模仿Groove行为的原因。似乎
几乎就是我需要添加的所有东西。但是添加这一点似乎对背景播放或背景控制都不起作用。我在我的surfacebook上测试了它,这并不重要。当您按下键盘时,它是否触发了事件?您是否使用MediaPlayerElement进行后台播放或控制?我是否必须使用MediaPlayerElement?我使用MediaElement是因为我想自己定制它。谢谢!它正在工作。我已经为媒体元素手动实现了很多功能。移除它们真是一件痛苦的事。。。
<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>
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
​
                    }​
            }​
        }
<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;​
​
        }