【问题标题】:VlcControl is always on the top of the GridVlcControl 始终位于 Grid 的顶部
【发布时间】:2026-02-02 04:30:01
【问题描述】:

我需要将VlcControl 与其他包含菜单控件的Grid 一起放在Grid 中,但不管VlcControl 始终位于父Grid 的顶部。

 <Grid> 
 <Grid x:Name="VideoHolder"> 
 <vlc:VlcControl /> 
 </Grid> 

 <Grid x:Name="MenuHolder"> 
 <!— content —> 
 </Grid> 
 </Grid> 

【问题讨论】:

  • 你能澄清一下吗?您希望内容位于视频的顶部吗?
  • 我怀疑你能做的最好的事情就是在 VLC 控件上使用 Popup 控件,因为视频在屏幕上呈现的方式。如果是菜单可能不是什么大问题?
  • @mhttk:它实际上不是菜单。 &lt;!- content -&gt; 表示其他 WPF 控件 Buttons、Slider e 的容器。吨。 c...
  • 我在我的答案中添加了一个代码示例。我可以切换 zindex 来获取 zorder 的变化
  • 实际上,@mhttk 可能正在做一些事情。处理这类事情时会出现空域问题。 IE。 WinformsHost.

标签: .net wpf vlc


【解决方案1】:

尝试在命名网格上使用附加属性Panel.ZIndex="NUMBER",您想要在顶部的那个应该有更大的数字。说Panel.ZIndex="2"

 <Grid>
    <Grid x:Name="VideoHolder" Panel.ZIndex="2">
        <Border Background="AliceBlue" Height="100" Width="300"  />
    </Grid>

    <Grid x:Name="MenuHolder" Panel.ZIndex="1">
        <Border Background="Beige" Margin="50,0,0,0" Height="100" Width="300" />
    </Grid>
</Grid>

【讨论】:

  • 仍然没有任何变化。
  • 还是不行。我认为这可能是某种 WinFormsHost 问题,但我不确定。
  • 这是一个 wpf/win32 空域问题。鉴于内容是基本的 wpf ala 边框,我提供的 sn-p 有效。
  • 您对处理 wpf/win32 空域问题有何建议。
  • 确实没有合适的解决方案。许多变通方法涉及将 win32 内容渲染到屏幕外(您的视频),然后将其渲染回 WPF 元素。 DirectX 是一种方式,C++ GDI 是另一种方式,microsoftdwayneneed.codeplex.com 是第三种方式。我在不同的上下文中使用了这三个。
【解决方案2】:

如果这适合您的需求,您可以尝试使用如下面的 sn-p 中的弹出窗口。

请注意,您可能无法让透明度正常工作。

<Grid>
     <vlc:VlcControl x:Name="VideoHolder"/>
     <Popup Height="Auto"
            AllowsTransparency="True"
            IsOpen="True"
            PlacementTarget="{Binding ElementName=VideoHolder}">
                    <Border Background="White">
                      ...
                    </Border>
     </Popup>
 </Grid>

为inkCanvas

<Grid>
     <vlc:VlcControl x:Name="VideoHolder" Panel.ZIndex="1"/>
     <InkCanvas Panel.ZIndex="2">

     </InkCanvas>
 </Grid>

【讨论】:

  • 还是不行。我认为这可能是某种 WinFormsHost 问题,但我不确定。
  • 我可能会尝试使用 InkCanvas 的下一步