我想使用C#(WPF)以编程方式将Grid
(可能包含图像,按钮或任何其他控件)添加到DataGrid
。我也尝试使用这些代码进行测试:
public class DataGridItem
{
public string Path { get; set; }
public Grid Stats;
}
,xaml代码与DataGrid
列:
<DataGridTextColumn Header="h1" Binding="{Binding Path}"/>
<DataGridTemplateColumn Width="100" Header="h2">
和后面的代码(在一个按钮中):
var g = new Grid()
{
Background = System.Windows.Media.Brushes.Black
};
var tb = new TextBlock()
{
Text = DateTime.Now.ToString()
};
g.Children.Add(tb);
Dg.Items.Add(
new DataGridItem()
{
Path = DateTime.Now.ToString(),
Stats = g
});
我尝试为Binding
列设置h2
,但我不能,因为它是DataGridTemplateColumn
。是否有任何方法可以将h2
的绑定设置为h1
列?
或者,有没有办法以编程方式将Grid
添加到DataGrid
?
<DataGridTemplateColumn Width="100" Header="h2">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ContentPresent Content="{Binding Stats}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
有没有办法将h2的绑定设置为h1列?
没有。
或者,有没有办法以编程方式将Grid添加到DataGrid?
您可以通过编程方式创建CellTemplate
:
DataGridTemplateColumn h2 = Dg.Columns[1] as DataGridTemplateColumn;
const string Xaml = "<DataTemplate xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"><ContentControl Content=\"{Binding Stats}\" /></DataTemplate>";
h2.CellTemplate = XamlReader.Parse(Xaml) as DataTemplate;
示例XAML:
<DataGrid x:Name="Dg">
<DataGrid.Columns>
<DataGridTextColumn Header="h1" Binding="{Binding Path}"/>
<DataGridTemplateColumn Width="100" Header="h2" />
</DataGrid.Columns>
</DataGrid>