I have a datagrid with several DataGridTextColumn defined.
I need to use the Textblock's Tag property. I can't find it on a DataGridTextColumn.
I found a workaround which works, i.e a DataTemplateColumn in which I declare the textblock, in which case I have access to the Tag property:
<DataGridTemplateColumn Header="Column with Tag accessible">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Tag="{Binding Variable1Name}"
Text="{Binding Variable2Name}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
It would be great however if I could achieve the same result with the DataGridTextColumn. Any idea please?
It would be great however if I could achieve the same result with the
DataGridTextColumn
.
You can't since the DataGridTextColumn
has no Tag
property that you can set.
It's unclear why you need to set the Tag
property at all but if you don't want to create a DataGridTemplateColumn
and a CellTemplate
for each column, you could create a custom 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; }
}
Then you simply replace the built-in DataGridTextColumn
with this one in your XAML:
<local:CustomDataGridTextColumn Binding="{Binding Variable2Name}" TagPropertyName="Variable1Name" />