gpt4 book ai didi

c# - WindowsFormsHost 上的工具栏覆盖

转载 作者:行者123 更新时间:2023-11-30 17:59:21 24 4
gpt4 key购买 nike

我在 WPF 窗口内的 WindowsFormsHost 控件中嵌入了一个 SWF 对象。

我想在 swf 影片上添加一个工具栏。

我下面的代码片段的问题是,当新的子项被添加到主机控件时(或者电影被加载,我还没有弄清楚是哪个),工具栏实际上是不可见的。似乎出于某种原因将 swf 的 z-index 设置为顶部。

这是它的样子:

XAML:

<Grid Name="Player">
<WindowsFormsHost Name="host" Panel.ZIndex="0" />
<Grid Name="toolbar" Panel.ZIndex="1" Height="50"
VerticalAlignment="Bottom">
[play, pause, seek columns go here]
</Grid>
</Grid>

C#:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
flash = new AxShockwaveFlashObjects.AxShockwaveFlash();
host.Child = flash;
flash.LoadMovie(0, [movie]); // Movie plays, but no toolbar :(
}

如果您对此问题有任何见解,我们将不胜感激。


更新:由于没有发布合适的答案,我将自己的解决方案放在下面。我意识到这与其说是一种解决方案,不如说是一种黑客攻击,因此我愿意接受其他建议。

最佳答案

这是我解决 WindowsFormsHost Z-index 问题的方法。

想法是将您需要叠加的任何内容嵌套在弹出窗口中。然后根据 this answer 更新该弹出窗口的位置每当调整窗口大小/移动窗口时。

注意:您可能还想在窗口激活/停用时处理事件,以便在窗口失去焦点(或在另一个窗口后面)时弹出窗口消失。

XAML:

<Window [stuff]
LocationChanged="Window_LocationChanged"
SizeChanged="Window_SizeChanged" >
<Grid Name="Player">
[same code as before]
<Popup Name="toolbar_popup" IsOpen="True" PlacementTarget="{Binding ElementName=host}">
[toolbar grid goes here]
</Popup>
</Grid>
</Window>

C#:

private void resetPopup()
{
// Update position
// https://stackoverflow.com/a/2466030/865883
var offset = toolbar_popup.HorizontalOffset;
toolbar_popup.HorizontalOffset = offset + 1;
toolbar_popup.HorizontalOffset = offset;

// Resizing
toolbar_popup.Width = Player.ActualWidth;
toolbar_popup.PlacementRectangle = new Rect(0, host.ActualHeight, 0, 0);
toolbar_popup.Placement = System.Windows.Controls.Primitives.PlacementMode.Top;
}
private void Window_LocationChanged(object sender, EventArgs e)
{ resetPopup(); }

private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
{ resetPopup(); }

关于c# - WindowsFormsHost 上的工具栏覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11248384/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com