Я использую официальный образец - 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.
После этого вы можете запустить свое приложение и проверить результат.