UWP, включая транспортную панель медиаплеера как часть командной строки? - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь создать пользовательские элементы управления транспортировкой мультимедиа для приложения медиаплеера, где я могу добавить свои собственные кнопки и функции.Единственное, что мне нужно из стандартного MediaTransportControl , это SeekBar .

Я попытался поиграться со словарем, который слишком сложен для пользы.Я пытаюсь достичь.Есть ли простой способ сделать это или я должен просто сдаться?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 21 сентября 2018

Хорошо ..... Я часами возился с этим.Я прочитал приведенную выше ссылку из touseefbsb и прочитал построчно образец CustomMediaTransportControl.

Я создал словарь и скопировал его из образца слово в слово:

<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:MultiVid">

<!--This is the style for a custom Media Transport Control. We are taking the default control and simply tweaking it to fit our needs.
The default template can be found here: C:\Program Files (x86)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP\10.0.10069.0\Generic
Simply take the portion of code that corresponds to the MediaTransportControl and bring it in to your app just like we have done in this sample-->

<Style TargetType="local:CustomMediaTransportControls">
    <Setter Property="IsTabStop" Value="False" />
    <Setter Property="Background" Value="Transparent" />
    <Setter Property="FlowDirection" Value="LeftToRight" />
    <Setter Property="UseSystemFocusVisuals" Value="True" />
    <Setter Property="IsTextScaleFactorEnabled" Value="False" />
    <Setter Property="Template">

  ----- etc..... it's a long file but it's the exact copy of the "generic.xaml" file of the Sample except for the beginning where I used xmlns:local="using:MultiVid" as my solution is called MultiVid.

    </Style>
   </ResourceDictionary>

Изатем я создал класс в соответствии с руководством:

namespace MultiVid
{
public sealed class CustomMediaTransportControls : MediaTransportControls
{
    public event EventHandler<EventArgs> Moins10click;

    public CustomMediaTransportControls()
    {
        this.DefaultStyleKey = typeof(CustomMediaTransportControls);
    }

    protected override void OnApplyTemplate()
    {
        // Find the custom button and create an event handler for its Click event.
        var Moins10Button = GetTemplateChild("Moins10") as Button;
        Moins10Button.Click += Moins10Button_Click;
        base.OnApplyTemplate();

    }

    private void Moins10Button_Click(object sender, RoutedEventArgs e)
    {
        var handler = Moins10click;
        if (handler != null)
    {
        handler(this, EventArgs.Empty);
    }
    }
}
}

И, наконец, мой MainPage Xaml:

<Page
x:Class="MultiVid.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="using:MultiVid"
mc:Ignorable="d"
Loaded="initkbd"
Unloaded="unloadkbd">

 <Grid x:Name="imggrid" Background="Black" BorderBrush="Black" >

    <MediaPlayerElement x:Name="mediaPlayerElement" AutoPlay="True" Height="Auto" Width="Auto" AreTransportControlsEnabled="True" RequestedTheme="Dark" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
        <MediaPlayerElement.TransportControls>
            <local:CustomMediaTransportControls IsCompact="False"
                                                IsZoomButtonVisible="True"
                                                IsZoomEnabled="True"
                                                IsPlaybackRateButtonVisible="True"
                                       IsEnabled="True">
            </local:CustomMediaTransportControls>
        </MediaPlayerElement.TransportControls>
    </MediaPlayerElement>

</Grid>


</Page>

Когда я использую этот код выше с моим кодом C #, я не вижуТранспортКонтроль на всех.Если я закомментирую этот раздел, я увижу Управление транспортом.

Через 5 часов я все равно не получу его ... Первого мая!

0 голосов
/ 25 сентября 2018

Хорошо, понял!

Вот рецепт:

  1. Добавьте отдельный файл XAML для хранения словаря ресурсов для новой транспортной панели.Скопируйте в него файл из образца CustomMediaTransport .Убедитесь, что вы изменили x: local = "using: ..." на свое собственное пространство имен для своего проекта.

  2. Добавьте нужные вам кнопки в разделе CommandBar кода XAML (там вы увидите другие кнопки панели команд. Формат для вашей пользовательской кнопки панели команд:

      <AppBarButton x:Name='Plus500Button'
              Label="Very Long Skip Forward"
              VerticalAlignment="Center"
              Style='{StaticResource AppBarButtonStyle}'>
          <AppBarButton.Icon>
              <BitmapIcon UriSource="put in here the asset for your button icon"/>
          </AppBarButton.Icon>
      </AppBarButton>
    
  3. Добавьте код для новых кнопок в отдельный файл CS. Замените пространство имен на пространство имен вашего решения.

    namespace yournamespace
    {
    
    public sealed class CustomMediaTransportControls : MediaTransportControls
    {
    
    //Add an eventhandler for each button you added
    public event EventHandler<EventArgs> Plus500;
    
    public CustomMediaTransportControls()
    {
        this.DefaultStyleKey = typeof(CustomMediaTransportControls);
    }
    
    
    //Add an override for each button you created in the following format:
    protected override void OnApplyTemplate()
    {
        Button Plus500Button = GetTemplateChild("Plus500Button") as Button;
        Plus500Button.Click += Plus500Button_Click;
    }
    
    //To raise an event when the button is clicked, add the following code for each button you added:
    private void Plus500B_Click(object sender, RoutedEventArgs e)
    {            
        Plus500?.Invoke(this, EventArgs.Empty);
    }
    

И, наконец,используйте новую настраиваемую транспортную панель следующим образом в своем коде XAML:

    <MediaPlayerElement x:Name="mediaPlayerElement" 
                                Grid.ColumnSpan="2" 
                                Grid.RowSpan="4" 
                                AutoPlay="True"  
                                AreTransportControlsEnabled="True"             
         <MediaPlayerElement.TransportControls >
            <local:CustomMediaTransportControls IsCompact="False"
                                       IsPlaybackRateButtonVisible="True"
                                       IsEnabled="True"
                                       Plus500="Plus500"   <!-- Use the name you added in the EventHandler you added for the cuscom command bar

            </local:CustomMediaTransportControls>
        </MediaPlayerElement.TransportControls>

И вуаля! Боб - брат твоей матери!

0 голосов
/ 20 сентября 2018

Существует 2 способа добавления пользовательских функций в элементы управления медиаплеера.

  1. Пользовательские элементы управления транспортом : где вы можете редактировать стиль шаблона,или добавив дополнительные кнопки и добавив к ним функциональность, вы также можете удалить существующие кнопки или свернуть их, если они вам не нужны.Вы даже можете установить видимость некоторых кнопок непосредственно из транспортных элементов управления, не переходя в стиль, используя такие свойства, как IsZoomButtonVisible и т. Д.

  2. Не используйте встроенные элементы управления транспортировкой SDK.и установите AreTransportControlsEnabled вашего элемента управления MediaPlayerElement в значение false, а затем создайте собственный пользовательский элемент управления для управления мультимедиа, что на самом деле сложнее, особенно если вы новичок.

Я порекомендую вам первый вариант, просто пошагово следуйте документам, как только вы поймете основы того, как все это работает вместе, вы сможете легко добавитьмножество пользовательских кнопок для вашего контроля.Вам не нужно возиться со стилем, просто добавьте кнопки на панель команд стиля, а затем добавьте обработчик щелчков к нему, все это задокументировано в приведенной выше ссылке, попробуйте шаг за шагом и там, где у вас возникли проблемы., продолжайте задавать качественные вопросы здесь.

...