WPF DataGridTextColumn 和标签
WPF DataGridTextColumn and Tag
我有一个定义了多个 DataGridTextColumn 的数据网格。
我需要使用文本块的标签 属性。我在 DataGridTextColumn 上找不到它。
我找到了一个可行的解决方法,即我在其中声明文本块的 DataTemplateColumn,在这种情况下我可以访问标签 属性:
<DataGridTemplateColumn Header="Column with Tag accessible">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Tag="{Binding Variable1Name}"
Text="{Binding Variable2Name}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
但是,如果我可以使用 DataGridTextColumn 获得相同的结果,那就太好了。有什么想法吗?
It would be great however if I could achieve the same result with the DataGridTextColumn
.
你不能,因为 DataGridTextColumn
没有你可以设置的 Tag
属性。
不清楚为什么您需要设置 Tag
属性,但如果您不想为每列创建 DataGridTemplateColumn
和 CellTemplate
,您可以创建自定义 DataGridTextColumn
:
public class CustomDataGridTextColumn : DataGridTextColumn
{
protected override FrameworkElement GenerateElement(DataGridCell cell, object dataItem)
{
FrameworkElement fe = base.GenerateElement(cell, dataItem);
if (fe is TextBlock textBlock)
{
textBlock.SetBinding(TextBlock.TagProperty, new Binding(TagPropertyName)); //use TagProperty here
}
return fe;
}
public string TagPropertyName { get; set; }
}
然后你只需将 XAML 中的内置 DataGridTextColumn
替换为这个 XAML:
<local:CustomDataGridTextColumn Binding="{Binding Variable2Name}" TagPropertyName="Variable1Name" />
我有一个定义了多个 DataGridTextColumn 的数据网格。
我需要使用文本块的标签 属性。我在 DataGridTextColumn 上找不到它。
我找到了一个可行的解决方法,即我在其中声明文本块的 DataTemplateColumn,在这种情况下我可以访问标签 属性:
<DataGridTemplateColumn Header="Column with Tag accessible">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Tag="{Binding Variable1Name}"
Text="{Binding Variable2Name}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
但是,如果我可以使用 DataGridTextColumn 获得相同的结果,那就太好了。有什么想法吗?
It would be great however if I could achieve the same result with the
DataGridTextColumn
.
你不能,因为 DataGridTextColumn
没有你可以设置的 Tag
属性。
不清楚为什么您需要设置 Tag
属性,但如果您不想为每列创建 DataGridTemplateColumn
和 CellTemplate
,您可以创建自定义 DataGridTextColumn
:
public class CustomDataGridTextColumn : DataGridTextColumn
{
protected override FrameworkElement GenerateElement(DataGridCell cell, object dataItem)
{
FrameworkElement fe = base.GenerateElement(cell, dataItem);
if (fe is TextBlock textBlock)
{
textBlock.SetBinding(TextBlock.TagProperty, new Binding(TagPropertyName)); //use TagProperty here
}
return fe;
}
public string TagPropertyName { get; set; }
}
然后你只需将 XAML 中的内置 DataGridTextColumn
替换为这个 XAML:
<local:CustomDataGridTextColumn Binding="{Binding Variable2Name}" TagPropertyName="Variable1Name" />