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

Uwp 媒体播放器元素初始化后,如何将焦点设置为播放/暂停按钮?,uwp,media-player,uwp-xaml,caml,Uwp,Media Player,Uwp Xaml,Caml,我正在使用MediaPlayerElement,并添加一个TransportControls 默认情况下,在播放器初始化后,焦点始终在音量按钮上 现在我想在播放器初始化后使用“焦点播放/暂停”按钮 我做了一些基本的事情。与下面的自定义MediaTransportControls类似 我可以使用 Globals.ButtonPlayPause=GetTemplateChild(“PlayPauseButton”)作为按钮 玩家初始化后,我使用 if (Globals.ButtonPlayPause

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

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

现在我想在播放器初始化后使用“焦点播放/暂停”按钮

我做了一些基本的事情。与下面的自定义
MediaTransportControls
类似

我可以使用
Globals.ButtonPlayPause=GetTemplateChild(“PlayPauseButton”)作为按钮

玩家初始化后,我使用

if (Globals.ButtonPlayPause != null)
  Globals.ButtonPlayPause.Focus(FocusState.Programmatic);
这似乎不起作用

谁能告诉我为什么。Thx


我使用的是官方样本,这也是一个定制的SMTC。在这个示例中,我在customer 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样式添加了焦点状态的视觉状态组,该样式稍后将应用于play按钮

在焦点状态的视觉状态组中,我添加了三种状态-
聚焦
指针聚焦
未聚焦
。 像这样:

                        <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

之后,您可以启动应用程序并检查结果


您好,我尝试了您的方法,按空格键,播放机暂停/播放。但它没有视觉反馈,用户仍然不知道焦点在哪里。因此,我将MediaTransportControls.xaml添加到App.xaml。我在AppBarButtonStyle中添加了
FocusVisualPrimaryBrush
和其他焦点内容。但没有起作用。“你能帮忙吗?”文森特,我已经更新了我的答案。请检查一下。