Как установить фокус на кнопку «Воспроизведение / Пауза» после инициализации элемента медиаплеера? - PullRequest
0 голосов
/ 20 марта 2020

Я использую MediaPlayerElement и добавляю TransportControls.

По умолчанию фокус всегда на кнопке громкости после инициализации игрока.

Теперь я хочу, чтобы фокус был включен Кнопка / пауза после инициализации игрока.

Я сделал несколько базовых c вещей. Как и в обычай, MediaTransportControls следующие https://docs.microsoft.com/en-us/windows/uwp/design/controls-and-patterns/custom-transport-controls#customize -the-transport-control

И я могу получить кнопку воспроизведения / паузы, используя Globals.ButtonPlayPause = GetTemplateChild("PlayPauseButton") as Button;

После инициализации игрока Я использую

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

Кажется, это не работает.

Так может кто-нибудь сказать мне, почему. Thx.

enter image description here

1 Ответ

1 голос
/ 23 марта 2020

Я использую официальный образец - XamlCustomMediaTransportControls , который также является настраиваемым SMT C. В этом примере я создал метод publi c внутри пользовательского элемента управления SMT C, который устанавливает состояние кнопки воспроизведения. После этого я запустил семпл, напрямую нажал кнопку пробел / ввод, событие кнопки воспроизведения срабатывает. Это доказывает, что кнопка воспроизведения настроена на успешную фокусировку.

Внутри пользовательского SMT C добавьте следующий метод:

    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 по умолчанию в собственный стиль SMT C. Затем я добавил группу визуальных состояний состояния Focus для специального стиля Appbarbutton, который будет применен к кнопке воспроизведения позже.

В группе визуальных состояний состояния Focus я добавил три состояния - Focused, PointerFocused * * 1023. Например:

                        <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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...