0

几天来,我一直在寻找有关如何为每个人似乎都在谈论的 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>

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

提前谢谢^_^

4

2 回答 2

5

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

我还考虑过使用现有的并尝试覆盖他们的处理程序来实现我自己的代码并覆盖每个按钮的文本属性以更改其图标

那将是要走的路。

这个先前的 SO 问题可能会回答您的问题:https ://stackoverflow.com/a/14217500/4064749

只需创建一个新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

于 2020-04-14T07:22:39.280 回答
1

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

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

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

感谢mfkl的回答,它帮助我了解了一切如何在幕后工作以提出解释,尽管这花了我几天时间才弄清楚。

于 2020-04-15T14:18:26.500 回答