[英]Draw a grid dynamically xaml c#
我希望xaml中的网格可以向我显示一组对象,我应该如何进行?
我已经绑定了这些:
C# // Collection.DataContext = Mycollection;
xaml // Grid.RowSpan="{Binding getSizeofcollection}"
我的收藏包含所有相同种类的对象。 我想显示1个对象/行
是否可以创建一个模板,该模板显示如何连续显示一个对象然后在网格中使用它?
感谢您的建议
编辑:事实上,我不能绑定到哈希表,但我可以绑定到列表是我的问题的根源。 现在我正在尝试在列表中转换我的哈希表
编辑n°2:好吧,我正确地将哈希表转换为列表,但是此xamlparse异常仍在此处
Grid
是布局容器,而不是控件。 您想使用一个DataGrid
,它将允许您将ItemsSource
设置为Mycollection
。 然后,您可以让它为您创建列,也可以控制并明确定义所需的列以及应如何显示它们。
很抱歉,我发现您的问题不清楚您要的是什么。
基于您的评论点击这里
我有一个相同对象的列表,我希望每个对象及其属性都在DataGrid / StackPanel的一行中,或类似的东西,所以20个对象,20行,每个属性都有一个列
听起来您只需要一个DataGrid。
<DataGrid x:Name="Collection" ItemsSource="{Binding }" />
DataGrid
的默认行为是为每个项目创建一个Row,并为该项目的每个属性自动生成一列。 因此,如果列表中有20个MyClass
类型的对象,并且每个对象包含3个属性,它将自动生成20行3列的网格。
但是,如果我误会了您,而您实际上正在寻找创建包含一行中所有项目的水平StackPanel,并且您不需要DataGrid提供的选择/排序功能,建议您改用ItemsControl 。
这只是一个简单的控件,它将遍历一个集合,并使用您指定的任何模板绘制集合中的每个项目。 所有项目都包装在<ContentPresenter>
并放置在您指定的任何布局容器中(默认为垂直StackPanel)。
既然您说过要使所有项目都在一条水平线上,那么最好的ItemsPanelTemplate
可能是StackPanel
,其方向设置为Horizontal
。
您的XAML最终看起来像这样:
<ItemsControl x:Name="Collection" ItemsSource="{Binding }">
<!-- ItemsPanelTemplate -->
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<!-- ItemTemplate -->
<ItemsControl.ItemTemplate>
<DataTemplate>
<!-- // put whatever XAML you want to use to draw each item here -->
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
您可以使用一些自定义的AttachedProperty。
像这样:
<Grid Grid.Row="1"
commonUI:GridExtension.ItemsSource="{Binding ItemsSource}"
commonUI:GridExtension.Rows="{Binding RowDefinitions}"
commonUI:GridExtension.Columns="{Binding ColumnDefinitions}"/>
对于文档: http : //msdn.microsoft.com/zh-cn/library/ms749011(v=vs.110).aspx
但就您而言,简单的ListBox或ItemsControl似乎更合适...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.