我需要从代码创建一个DataGridColumn。 XAML等价物将是:
<data:DataGridTemplateColumn Header="Name" Width="100">
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" TextTrimming="WordEllipsis"></TextBlock>
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>
我是这样开始的:
DataGridTemplateColumn column = new DataGridTemplateColumn
{
Header = "Name",
Width = 100,
};
TextBlock inside = new TextBlock {TextTrimming = TextTrimming.CharacterEllipsis};
但我不知道如何'合并'这样的谜题。 XAML中有嵌套元素,如何从代码中实现这一点?
答案 0 :(得分:3)
执行此操作的一种好方法是将整个XAML片段打包到一个字符串中,并在其上调用XamlReader.Load()或XamlReader.Parse()。这种方法的一个好处就是它也可以在Silverlight中工作(有一些小问题),你无法在代码中构建DataTemplate
。
答案 1 :(得分:2)
几乎在那里,将代码更改为此代码并且应该可以正常工作:
DataGridTemplateColumn column = new DataGridTemplateColumn
{
Header = "Name",
Width = 100,
};
FrameworkElementFactory ftb = new FrameworkElementFactory(typeof(TextBlock));
Binding b = new Binding("Name");
ftb.SetValue(TextBlock.Text, b);
ftb.SetValue(TextBlock.TextTrimming, TextTrimming.CharacterEllipsis);
DataTemplate ct = new DataTemplate();
ct.VisualTree = ftb;
column.CellTemplate = ct;
除了上述方法之外,另一种方法是在资源中的XAML中定义datatemplate,然后在代码中动态加载它:
<强> XAML:强>
<Window.Resources>
<DataTemplate x:Key="myCellTemplate">
<TextBlock Text="{Binding Name}" TextTrimming="WordEllipsis" />
</DataTemplate>
</Window.Resources>
<强>代码:强>
DataGridTemplateColumn column = new DataGridTemplateColumn
{
Header = "Name",
Width = 100,
};
column.CellTemplate = this.FindResource("myCellTemplate") as DataTemplate;