如何在 Xamarin Forms 中创建 LibVLCSharp 自定义播放控件?

How to create LibVLCSharp custom playback controls in Xamarin Forms?

几天来我一直在寻找关于如何为 LibVLCSharp 创建自定义播放控件的指南,似乎每个人都在谈论它,但我从未找到它的 guid。

我只是想为底部播放控制面板创建带有事件处理程序的其他按钮,我试过了但是在进入中断时在启动时抛出 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>

我希望它能像原来的那样运行(自动隐藏、点击时叠加等...),但具有我自己的布局和控件。我还考虑过使用现有的并尝试覆盖他们的处理程序以实现我自己的代码并覆盖每个按钮的文本 属性 以更改其图标但没有找到任何帮助。

提前致谢^_^

您感兴趣的代码在这里:https://code.videolan.org/videolan/LibVLCSharp/-/blob/3.x/src/LibVLCSharp.Forms/Shared/Themes/Generic.xaml

I also thought about using the existing one and try to override their handler to implement my own code and override the text property for each button to change its icon

那就是要走的路。

之前的 SO 问题可能会回答您的问题:

只需创建一个新的 Style based on 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

我终于找到了异常的问题,当我创建完全正确的自定义控件模板时,LibVLCSharp 开发人员本身背后的 MediaPlayerElement 代码无法再找到具有已定义名称的元素,因为他们为按钮使用了硬编码名称和视图,而不是使用绑定和动态设置器。

因此,可以采取多种解决方法来解决此类问题,以下是我的一些想法:

  1. 使用通用样式 documented here 并在不删除任何元素的情况下对其进行修改,而是隐藏或覆盖它们。
  2. 使用与原始控件同名的控件创建您自己的样式。
  3. 找到一种方法来修改或创建一个全新的播放控制元素,使用可以找到的原始元素 here and here

感谢 mfkl 的回答,它帮助我弄清楚了一切是如何在引擎盖下工作的,以得出解释,尽管这花了我几天时间才弄明白。