[英]how to generate a column in C# code for datagrid that have specific template in wpf
我有这段代码并且运行良好,但我想在 C# 中动态更改它。 谁能帮我将此 XAML 代码转换为 C# 代码?
注意:我在 C# 代码的页面加载中设置了这个数据网格的 Itemsource
注意:我想将此列转换为 C# 代码后,将 AutoGenerateColumns 更改为 true
<DataGrid x:Name="dg" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding ValueA}" />
<TextBlock Text="{Binding ValueB}" />
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
自动生成列 = 假:
public partial class MyPage:Page
{
public MyPage()
{
InitializeDataGrid();
Loaded += MyPage_Loaded;
// don't forget to add the _dataGrid into the page
this.Content = _dataGrid;
}
private void MyPage_Loaded(object sender, RoutedEventArgs e)
{
//_dataGrid.ItemsSource = xxx;
}
private void InitializeDataGrid()
{
// <DataGrid x:Name="dg" AutoGenerateColumns="False">
// <DataGrid.Columns>
// <DataGridTemplateColumn>
// <DataGridTemplateColumn.CellTemplate>
// <DataTemplate>
// <StackPanel Orientation="Horizontal">
// <TextBlock Text="{Binding ValueA}" />
// <TextBlock Text="{Binding ValueB}" />
// </StackPanel>
// </DataTemplate>
// </DataGridTemplateColumn.CellTemplate>
// </DataGridTemplateColumn>
// </DataGrid.Columns>
//</DataGrid>
// StackPanel and Children
var stackPanelFactory = new FrameworkElementFactory(typeof(StackPanel));
stackPanelFactory.SetValue(StackPanel.OrientationProperty, Orientation.Horizontal);
var textBlockFactoryA = new FrameworkElementFactory(typeof(TextBlock));
textBlockFactoryA.SetBinding(TextBlock.TextProperty, new Binding("ValueA"));
var textBlockFactoryB = new FrameworkElementFactory(typeof(TextBlock));
textBlockFactoryB.SetBinding(TextBlock.TextProperty, new Binding("ValueB"));
stackPanelFactory.AppendChild(textBlockFactoryA);
stackPanelFactory.AppendChild(textBlockFactoryB);
// DataTemplate
var dataTemplate = new DataTemplate
{
VisualTree = stackPanelFactory
};
// DataGridTemplateColumn
var templateColumn = new DataGridTemplateColumn
{
CellTemplate = dataTemplate
};
_dataGrid.Columns.Add(templateColumn);
// DataGrid
_dataGrid.Name = "gd";
_dataGrid.AutoGenerateColumns = false;
}
private readonly DataGrid _dataGrid = new DataGrid();
}
自动生成列 = 真:
public partial class MyPage:Page
{
public MyPage()
{
InitializeDataGrid();
Loaded += MyPage_Loaded;
// don't forget to add the _dataGrid into the page
this.Content = _dataGrid;
}
private void MyPage_Loaded(object sender, RoutedEventArgs e)
{
//_dataGrid.ItemsSource = xxx;
}
private void InitializeDataGrid()
{
// <DataGrid x:Name="dg" AutoGenerateColumns="False">
// <DataGrid.Columns>
// <DataGridTemplateColumn>
// <DataGridTemplateColumn.CellTemplate>
// <DataTemplate>
// <StackPanel Orientation="Horizontal">
// <TextBlock Text="{Binding ValueA}" />
// <TextBlock Text="{Binding ValueB}" />
// </StackPanel>
// </DataTemplate>
// </DataGridTemplateColumn.CellTemplate>
// </DataGridTemplateColumn>
// </DataGrid.Columns>
//</DataGrid>
//// StackPanel and Children
//var stackPanelFactory = new FrameworkElementFactory(typeof(StackPanel));
//stackPanelFactory.SetValue(StackPanel.OrientationProperty, Orientation.Horizontal);
//var textBlockFactoryA = new FrameworkElementFactory(typeof(TextBlock));
//textBlockFactoryA.SetBinding(TextBlock.TextProperty, new Binding("ValueA"));
//var textBlockFactoryB = new FrameworkElementFactory(typeof(TextBlock));
//textBlockFactoryB.SetBinding(TextBlock.TextProperty, new Binding("ValueB"));
//stackPanelFactory.AppendChild(textBlockFactoryA);
//stackPanelFactory.AppendChild(textBlockFactoryB);
// DataTemplate
var dataTemplate = new DataTemplate
{
//VisualTree = stackPanelFactory
};
// DataGridTemplateColumn
var templateColumn = new DataGridTemplateColumn
{
CellTemplate = dataTemplate
};
_dataGrid.Columns.Add(templateColumn);
// DataGrid
_dataGrid.Name = "gd";
_dataGrid.AutoGenerateColumns = true;
}
private readonly DataGrid _dataGrid = new DataGrid();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.