【发布时间】:2014-02-24 22:21:17
【问题描述】:
我必须使用 WPF 背后的代码动态创建数据网格。我必须在我的窗口中即时添加新的 DataGrid,但我希望它们的格式相似。我无法让 Style 工作。我需要 2 列:名称和值。我计划在创建数据网格时将其绑定到不同的数据。
任何帮助将不胜感激。这类东西的文档非常……分散。
<Window.Resources>
<Style x:Name="Template" TargetType="DataGrid">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="DataGrid">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Title" IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label></Label>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Value" Width="*" IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label></Label>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
编辑: 不知道还能怎么解释。
假设我的窗口上有一个堆栈面板。在这个堆栈面板上,我想随时添加 DataGrids。我将能够执行 MyStackPanel.Children.add(MyGrid)。
现在,每次我添加一个新的、唯一的 Grid 时,MyGrid 都可能有一个完全不同的 ItemsSource。但我始终希望在网格之间保持不变的是 2 列 - 标题和值。
我的所有数据都将类似于: 字典我的数据
String 是标题,int 是值。 我希望我添加的每个网格都有一个独特的“myData”应用于它们。如果我在启动时设置 3 个不同的网格,我可以做到这一点。但问题在于动态创建多个网格。 也许客户希望 1 个堆栈面板上有 50 个不同的 DataGrid。我只想确保每个带有 Title 和 Value 的网格的格式都相同,而不必在程序启动时在 XAML 中创建静态数量的网格。
所以我可以走了:
DataGrid MyGrid = new DataGrid();
MyGrid.Style = MyXAMLStyle;
MyGrid.ItemsSource = MyData;
MyStackPanel.Children.Add(MyGrid);
而不是做一些讨厌的事情,比如复制,这可能很简单,只有 2 列,但越来越疯狂。无论如何,这甚至都无法正常工作:
DataGrid template = new DataGrid();
DataGridColumn c = CustomStats.Columns[0];
template.Columns.Add(c);
c = CustomStats.Columns[1];
template.Columns.Add(c);
template.ItemsSource = MyData;
MyStackPanel.Children.Add(template);
【问题讨论】:
-
恕我直言,您的此类东西的文档非常...分散评论...至少可以说是荒谬的。您知道搜索WPF DataGrid 教程 获得了多少好的结果吗?如果你真的是这个意思,那么你显然看起来不是很努力。此外,您需要为您的问题提供所有 的相关详细信息,而到目前为止您还没有这样做。请至少显示数据绑定类。
-
WPF DataGrid 教程搜索的问题是结果与我想要实现的目标完全无关。可笑的是,感觉就像没看清自己一样。结果是关于在开始时定义和样式化一个预定义网格。无法使用已经存在的网格或具有样式的网格即时实例化多个网格。最重要的是,对 WPF DataGrid 样式的任何类型的搜索都会导致 WPF Datagrid 仅具有具有特定数据绑定的特定行。与我正在寻找的列定义相反。
-
在这种情况下,数据绑定类是无关紧要的。我正在寻找有关在 XAML 或 C# 中设置网格模板样式的任何类型的资源或解释,我可以使用这些模板在代码隐藏中使用 C# 创建多个网格。有或没有数据绑定。列模板更重要。只是没有创建一些讨厌的“网格复制”功能,需要大量的格式复制,这似乎很不自然并且违背了易于使用的样式/模板应该解决的问题,我找不到任何东西。
标签: c# .net wpf user-interface