初始化媒体播放器元素后如何将焦点设置到播放/暂停按钮?

问题描述 投票:0回答:1

我正在使用MediaPlayerElement,并添加一个TransportControls

默认情况下,播放器初始化后始终将焦点放在音量按钮上。

现在,我希望播放器初始化后焦点可以播放/暂停按钮。

我已经做了一些基本的事情。像自定义一样MediaTransportControls之后的https://docs.microsoft.com/en-us/windows/uwp/design/controls-and-patterns/custom-transport-controls#customize-the-transport-controls

而且我可以使用Globals.ButtonPlayPause = GetTemplateChild("PlayPauseButton") as Button;

播放器初始化后,我使用

if (Globals.ButtonPlayPause != null)
  Globals.ButtonPlayPause.Focus(FocusState.Programmatic);

似乎不起作用。

所以谁能告诉我为什么。谢谢。

enter image description here

uwp media-player uwp-xaml caml
1个回答
0
投票

我正在使用官方示例-XamlCustomMediaTransportControls,它也是自定义SMTC。在示例中,我在客户SMTC控件内创建了一个公共方法,该方法设置了播放按钮的状态。之后,我启动了示例,直接按下空格/输入按钮,就会触发播放按钮事件。证明已将播放按钮设置为成功对焦。

在自定义SMTC内添加以下方法:

    public void setfocus() 
    {
        AppBarButton playbutton = GetTemplateChild("PlayPauseButton") as AppBarButton;
        playbutton.Focus(FocusState.Programmatic);
    }

并且在主页:

  public MainPage()
    {
        this.InitializeComponent();

        //This following line is setting the source for the MediaPlayerElement
        this.MainMPE.Source = MediaSource.CreateFromUri(new Uri("ms-appx:///Assets/fishes.wmv"));
        this.Loaded += MainPage_Loaded;
    }

    private void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
        MySMTC.setfocus();
    }

请注意,所有代码均基于我发布的示例。这有用吗?

已更新:

仍使用官方样品进行测试。我将默认的Appbarbutton样式复制到了自定义SMTC样式中。然后,我为特殊的Appbarbutton样式添加了Focus状态的可视状态组,该样式将在以后应用于播放按钮。

在Focus状态的可视状态组中,我添加了三个状态-FocusedPointerFocusedUnfocused。像这样:

                        <Style x:Key="AppBarButtonStyleSpecial" TargetType="AppBarButton">
                                 ......
                            <Setter Property="AllowFocusOnInteraction" Value="True" />
                            <Setter Property="UseSystemFocusVisuals" Value="False" />
                            <Setter Property="KeyboardAcceleratorPlacementMode" Value="Hidden" />
                            <Setter Property="Template">
                                <Setter.Value>
                                    <ControlTemplate TargetType="AppBarButton">
                                        <Grid x:Name="Root"
                    MinWidth="{TemplateBinding MinWidth}"
                    MaxWidth="{TemplateBinding MaxWidth}"
                    Background="{TemplateBinding Background}"
                    BorderBrush="{TemplateBinding BorderBrush}"
                    BorderThickness="{TemplateBinding BorderThickness}"
                    CornerRadius="{TemplateBinding CornerRadius}" >

                                            <VisualStateManager.VisualStateGroups>

                                                 ......
                                                </VisualStateGroup>
                                                <!-- Focus states -->
                                                <VisualStateGroup x:Name="FocusStates">
                                                    <VisualState x:Name="Focused">
                                                        <VisualState.Setters>
                                                            <Setter Target="Content.Background" Value="Red" />

                                                        </VisualState.Setters>
                                                    </VisualState>

                                                    <VisualState x:Name="PointerFocused">
                                                        <VisualState.Setters>
                                                            <Setter Target="Content.Background" Value="Red" />
                                                        </VisualState.Setters>
                                                    </VisualState>

                                               ......

                                </Setter.Value>
                            </Setter>
                        </Style>

然后另一个关键点是,您需要将UseSystemFocusVisuals属性更改为false。

之后,您可以启动您的应用并检查结果。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.