在WPF中绑定包含WindowsFormHost项的ItemsControl

时间:2013-10-16 19:08:23

标签: c# wpf winforms xaml data-binding

我正在为我们的WPF应用程序构建一个UI元素,允许用户可视化以网格格式对齐的图形集合。据我了解,您可以使用带有WrapPanel的ItemsControl,它将以网格格式很好地对齐ui元素。

当我们尝试使用winforms图形库(zedgraph)生成图形时,困难就出现了。这意味着我们必须使用WindowsFormsHost来显示图表视图。我试图使用普通的数据绑定来绑定图表集合,它实际上并不起作用:

XAML:

<ItemsControl ItemsSource="{Binding Graphs}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <WindowsFormsHost Margin="5">
                <ui:Graph></ui:Graph>
            </WindowsFormsHost>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

上面的代码什么都没有显示,但是访问了Graphs getter。

此外,即使我取消绑定,我只是在ItemsControl中插入一些随机图表视图......它仍然没有显示任何内容:

XAML:

<ItemsControl>
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <WindowsFormsHost Margin="5">
        <ui:Graph></ui:Graph>
    </WindowsFormsHost>
    <WindowsFormsHost Margin="5">
    </WindowsFormsHost>
        <ui:Graph></ui:Graph>
    </WindowsFormsHost>
    <WindowsFormsHost Margin="5">
        <ui:Graph></ui:Graph>
    </WindowsFormsHost>
</ItemsControl>

为了测试以确保图形库正常运行,这确实显示了一个图形:

<Grid>
    <WindowsFormsHost Margin="5">
        <ui:Graph></ui:Graph>
    </WindowsFormsHost>
</Grid> 

有人能引导我朝正确的方向前进吗?非常感谢。

1 个答案:

答案 0 :(得分:2)

这可能与布局有关。 winforms很糟糕,需要你对所有东西的大小进行硬编码。

尝试为winformshost提供固定的硬编码宽度和高度