Как создать пользовательские элементы управления воспроизведением LibVLCSharp в Xamarin Forms? - PullRequest
0 голосов
/ 14 апреля 2020

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

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

<vlc:MediaPlayerElement MediaPlayer="{Binding MediaPlayer}" LibVLC="{Binding LibVLC}">
    <vlc:MediaPlayerElement.PlaybackControls>
        <vlc:PlaybackControls>
            <vlc:PlaybackControls.ControlTemplate>
                <ControlTemplate>
                    <Grid>
                        <StackLayout Orientation="Horizontal" HorizontalOptions="CenterAndExpand">
                            <Button Grid.Column="0" Text="Test 1"/>
                            <Button Grid.Column="1" Text="Test 1"/>
                            <Button Grid.Column="2" Text="Test 1"/>
                        </StackLayout>
                    </Grid>
                </ControlTemplate>
            </vlc:PlaybackControls.ControlTemplate>
        </vlc:PlaybackControls>
    </vlc:MediaPlayerElement.PlaybackControls>
</vlc:MediaPlayerElement>

Я хочу это действовать так же, как оригинал (Авто скрывает, накладывает на нажатие и т. д. c ...), но с моим собственным макетом и элементами управления. Я также подумал об использовании существующего и попытался переопределить их обработчик для реализации моего собственного кода и переопределить свойство текста для каждой кнопки, чтобы изменить ее значок, но мне не повезло найти какую-либо помощь.

Заранее спасибо ^ _ ^

Ответы [ 2 ]

2 голосов
/ 14 апреля 2020

Код, который вас интересует, находится здесь: https://code.videolan.org/videolan/LibVLCSharp/-/blob/3.x/src/LibVLCSharp.Forms/Shared/Themes/Generic.xaml

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

Это будет путь к go.

Этот предыдущий вопрос SO может ответить на ваш вопрос: { ссылка }

Просто создайте новый Style на основе PlaybackControlsStyle, переопределите то, что вы хотите, а затем установите его для элемента PlaybackControls.

Я недавно создал https://code.videolan.org/videolan/LibVLCSharp/-/issues/309 для отслеживания необходимости учебника по настройке MediaElement.

Дополнительные документы по наследованию стилей: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/styles/xaml/inheritance

0 голосов
/ 15 апреля 2020

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

Таким образом, можно решить несколько проблем, вот некоторые из моих идей:

  1. Используйте шаблон c style задокументировано здесь и измените его, не удаляя какие-либо элементы, а просто скрывайте их или накладывайте их.
  2. Создайте свой собственный стиль с элементами управления, получающими те же имена, что и у исходных.
  3. Найдите способ изменить или, возможно, создать совершенно новый элемент управления воспроизведением, используя оригинальный элемент, который можно найти здесь и здесь .

Благодаря ответу mfkl , который помог мне выяснить, как все работает под капотом я объяснил, хотя мне потребовалось несколько дней, чтобы понять.

...