为了账号安全,请及时绑定邮箱和手机立即绑定

UWP 键盘加速器 FN 问题

UWP 键盘加速器 FN 问题

C#
海绵宝宝撒 2023-08-20 15:18:39
<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 应用中的音乐。但是,仅按 F3 在我的 Surface Book 2 上不起作用。我需要同时按 FN 和 F3 才能使其工作。我应该怎么做才能只按F3?Microsoft 内置 UWP 应用 Groove Music 只需按 F3 即可播放和暂停。另一个问题是,当UWP应用程序的窗口最小化时,如何仍然使用键盘加速器?Groove 的键盘控制在窗口最小化时仍然有效。
查看完整描述

1 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超2个赞

看来这个行为——是否需要按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。你可以尝试一下官方的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;

        }


查看完整回答
反对 回复 2023-08-20
  • 1 回答
  • 0 关注
  • 101 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信