【问题标题】:UWP Keyboard Accelerator FN issueUWP 键盘加速器 FN 问题
【发布时间】:2019-08-11 01:57:31
【问题描述】:
<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 在我的 UWP 应用中播放/暂停音乐。但是,在我的 Surface Book 2 上仅按 F3 不起作用。我需要同时按 FN 和 F3 才能使其工作。我应该怎么做才能只需要按 F3? Microsoft 内置 UWP 应用 Groove Music 播放和暂停功能只需按 F3。

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

【问题讨论】:

    标签: c# xaml uwp keyboard-shortcuts


    【解决方案1】:

    看来行为--是否需要按FN,与安装应用程序的设备有关。我在PC上运行时,我只需要按F3,但表面上需要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应用窗口最小化时,当前窗口没有焦点,所以设置的快捷方式不会响应。但系统有其默认的快捷方式(例如Fn + F11)可以播放或暂停媒体。如果你想要响应系统快捷键,需要允许backgroundMediaPlayback。可以试试official demo,也可以通过键盘自带的媒体按钮来控制。

    更新

    根据官方的示例,如果要使用MediaElement播放,需要设置MediaPlay和MediaPlaybackList绑定播放列表。这种情况下,似乎可以通过系统默认的快捷键来控制。实际可行的是MediaPlayer。更详细的信息还需要阅读官方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;​
    ​
            }
    

    【讨论】:

    • 我很抱歉,但添加那段代码会使按 F3 或 FN+F3 无法工作...我不知道为什么。我实际上是想让默认快捷方式来控制我的应用程序。这就是我模仿 Groove 行为的原因。
    • 看来&lt;Capabilities&gt;&lt;uap3:Capability Name="backgroundMediaPlayback"/&gt; &lt;/Capabilities&gt; 几乎是我需要添加的所有内容。但是添加它似乎不适用于后台播放或后台控制。
    • 我在 Surfacebook 上测试过,没关系。当您按下键盘时,是否触发了事件?您是否使用 MediaPlayerElement 进行了后台播放或控制?
    • 我必须使用 MediaPlayerElement 吗?我使用 MediaElement 是因为我想自己定制它。
    • 谢谢!它现在正在工作。我已经为媒体元素手动实现了很多功能。删除它们是相当痛苦的......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多