WPF DataGridTextColumn и Tag - PullRequest
       41

WPF DataGridTextColumn и Tag

1 голос
/ 15 января 2020

У меня есть сетка данных с несколькими определенными DataGridTextColumn.

Мне нужно использовать свойство Tag текстового блока. Я не могу найти его в DataGridTextColumn.

Я нашел обходной путь, который работает, то есть DataTemplateColumn, в котором я объявляю текстовый блок, и в этом случае у меня есть доступ к свойству Tag:

<DataGridTemplateColumn Header="Column with Tag accessible">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Tag="{Binding Variable1Name}"
                       Text="{Binding Variable2Name}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

Было бы здорово, однако, если бы я мог достичь того же результата с DataGridTextColumn. Любая идея, пожалуйста?

1 Ответ

1 голос
/ 15 января 2020

Было бы здорово, однако, если бы я мог достичь того же результата с 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; }
}

Затем вы просто замените встроенный DataGridTextColumn на этот в своем XAML:

<local:CustomDataGridTextColumn Binding="{Binding Variable2Name}" TagPropertyName="Variable1Name" />
...