我已经到了网络的末尾并且回来了,我似乎找不到任何解决我的Z-Ordering WindowsFormsHost问题的方法。我的问题特定于呈现一个ListBox,其中的项目是WindowsFormsHost包装的WinForm控件。渲染时,所有项目都显示在ListBox边界之外 - 这使得整个屏幕看起来很糟糕。
我附上了一个快速代码示例。我有什么选择吗?我需要重新考虑我的布局吗?
<Window x:Class="WFH_ZOrderIssue.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
xmlns:wfi="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"
Title="WFH ListBox ZOrder" Height="300" Width="600">
<Grid>
<ListBox Background="LightBlue" HorizontalAlignment="Left" ItemsSource="{Binding}" MaxWidth="400" BorderThickness="0"
ScrollViewer.VerticalScrollBarVisibility="Hidden" ScrollViewer.CanContentScroll="False"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
SelectionMode="Extended" x:Name="lstDisplays"
>
<ListBox.ItemTemplate>
<DataTemplate>
<ScrollViewer x:Name="viewer" VerticalScrollBarVisibility="Hidden" >
<wfi:WindowsFormsHost Margin="20,0" x:Name="host">
<wf:Button Text="WindowFormsHost - The Ugly" />
</wfi:WindowsFormsHost>
</ScrollViewer>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
</Grid>
</Window>
和代码隐藏:
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
this.DataContext = System.Linq.Enumerable.Range(0, 30);
}
}
请帮助:)
答案 0 :(得分:1)
这称为AirSpace问题。 Winforms将在WPF之上呈现,因为它们都使用不同的呈现技术。有一些解决方案,但不是直截了当。
查看您可能能够工作的this blog entry或here。
如果这不起作用,我建议不要将WinForms置于低于顶层的位置(即在窗口上),并确保不要对布局做任何花哨的事情。