【问题标题】:How to put an auto show panel over a LibVLCSharp.WPF.VideoView?如何将自动显示面板放在 LibVLCSharp.WPF.VideoView 上?
【发布时间】:2019-12-06 07:40:11
【问题描述】:

我正在编写一个 WPF 桌面应用程序,具有一些视频播放功能。我决定使用 LibVLCSharp.WPF 来完成播放任务。

Xaml 代码:

<UserControl ...
             xmlns:vlc="clr-namespace:LibVLCSharp.WPF;assembly=LibVLCSharp.WPF"
             ... >
    <vlc:VideoView VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
        <Canvas VerticalAlignment="Stretch" HorizontalAlignment="Stretch" MouseEnter="Canvas_MouseEnter">
        </Canvas>
    </vlc:VideoView>
</UserControl>

播放视频效果很好,但是当我尝试将一些隐藏控件放入 Canvas(或任何其他类型的 Panel 控件)并使用 MouseEnter 事件更改它们的可见性时,什么也没有发生。

在调试时,我发现MouseEnter 事件只有在Canvas 至少有一个可见控件作为其子控件并且鼠标指针进入该可见控件时才能触发。

我已阅读有关“空域问题”的文章。这似乎与我无关,因为我只想在播放区域内绘制一个控制层。

有什么方法可以在 VLC 播放器上放置一个自动显示面板,仅当鼠标“悬停”在播放区域上时才会显示?

【问题讨论】:

  • 似乎与 code.videolan.org/videolan/LibVLCSharp/issues/267#note_48214 相关。您是否尝试设置背景颜色?
  • 您需要了解的是,将控件放在 VideoView 中确实是一种 hack。这些控件被分离并放置在 VideoView 上方的窗口中,这就是事件不冒泡的原因
  • @cube45 我将面板的背景更改为“#01000000”,并且成功了。谢谢。

标签: c# wpf libvlcsharp


【解决方案1】:

通过@cube45 的提示解决了问题。谢谢。

我将Canvas 中的Background 更改为“不那么透明”的东西。

Xaml 代码:

<Canvas Background="#01000000" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" MouseEnter="Canvas_MouseEnter">
</Canvas>

鼠标事件起作用了。棘手,但很有用。

【讨论】:

  • 透明背景是默认值,这是我的问题。我猜 LibVLCSharp 库会将完全透明的项目视为“不存在的东西”@cube45
  • 我在问这个问题,因为默认情况下左和明确设置为透明之间似乎存在差异,根据这个线程:stackoverflow.com/questions/7991314/…
  • @cube45 我今天试过了,但......它不起作用。我手动将背景设置为透明,然后不再触发鼠标事件。
猜你喜欢
  • 2017-11-19
  • 1970-01-01
  • 2016-04-27
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
  • 2013-04-13
  • 2011-05-24
相关资源
最近更新 更多