Поиск DataGridColumn из шаблона заголовка - PullRequest
0 голосов
/ 09 ноября 2011

Как найти DataGridTextColumn из шаблона HeaderTemplate?Есть ли способ сделать это, используя только XAML?Я пробовал FindAncestor типа DataGridTextColumn, но он не найден.

Я знаю, DataGridTextColumn не является частью визуального дерева.Есть ли обходной путь для этого?

Ответы [ 2 ]

0 голосов
/ 09 марта 2018

Доступ к столбцу по индексу в сетке данных с использованием поиска предков.

<DataGrid ItemsSource="{Binding Data}">
<DataGrid.Columns>
    <DataGridTextColumn x:Name="nameColumn" Header="Name" Binding="{Binding Name}">
        <DataGridTextColumn.HeaderTemplate>
            <DataTemplate>
                <TextBlock Foreground="Red">
                    <Run Text="{Binding Mode=OneWay}" />
                    <Run Text=" - " />
                    <Run Text="{Binding Columns[0].ActualWidth, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}, Mode=OneWay}" />
                </TextBlock>
            </DataTemplate>
        </DataGridTextColumn.HeaderTemplate>
    </DataGridTextColumn>
</DataGrid.Columns>

0 голосов
/ 10 ноября 2011

Вам действительно нужен весь объект столбца?DataContext будет тем, что вы передадите в качестве заголовка, например

<DataGridTextColumn Header="Name" Binding="{Binding Name}">
    <DataGridTextColumn.HeaderTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding}" Foreground="Red" />
        </DataTemplate>
    </DataGridTextColumn.HeaderTemplate>
</DataGridTextColumn>

Это приведет к красному заголовку с текстом «Имя».

Если вам действительно нужен столбец, вы можете использоватьElementName переплет:

<DataGrid ItemsSource="{Binding Data}">
    <DataGrid.Columns>
        <DataGridTextColumn x:Name="nameColumn" Header="Name" Binding="{Binding Name}">
            <DataGridTextColumn.HeaderTemplate>
                <DataTemplate>
                    <TextBlock Foreground="Red">
                        <Run Text="{Binding Mode=OneWay}" />
                        <Run Text=" - " />
                        <Run Text="{Binding ActualWidth, ElementName=nameColumn, Mode=OneWay}" />
                    </TextBlock>
                </DataTemplate>
            </DataGridTextColumn.HeaderTemplate>
        </DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>

Это показывает "Имя" и ширину столбца в заголовке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...