我有一个基于输入参数生成网格的库。网格可能包含基于输入的不同控件。我想创建一个ListBox,其中每个列表项将获得自己生成的Grid。这可行吗?我无法找到任何面向Panel的内容(Gird,StackPanel等),例如像Button一样公开Content属性。
答案 0 :(得分:0)
如何传递数据以构建网格?
我假设您有一个通过依赖属性接收数据的控件。即你有类似MyControl.MyData属性的东西,其中MyData是一个依赖属性。在这种情况下,请尝试使用DataTemplate。
创建一个ObservableCollection,其中每个项目都是您需要传递的数据,以便构建网格。
在ListBox的实例上,定义ItemTemplate以使用由您的控件组成的DataTemplate。
<ListBox>
<ListBox.ItemTemplate>
<DataTemplate>
<myAssembly:MyControl MyData="{Binding }"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
答案 1 :(得分:0)
@XAMeLi的答案几乎是正确的 - 更好的是 DataTemplateSelector ,这样每个数据项都可以有不同的模板(或生成的网格)。在扩展DataTemplateSelector
的类中,您可以轻松生成或加载适当的网格布局,作为单独的控件或动态DataTemplate。
查看这篇文章以获得一个很好的例子:WPF Tutorial - How To Use A DataTemplateSelector