WPF - привязка свойства Content пользовательского шаблона DataGridTextColumn к свойству родителя
Во-первых, я возвращаюсь в WPF после нескольких лет его ухода, я немного знал об этом раньше и разрабатываю несколько окон, но теперь я за пределами ржавого. Я пытаюсь создать DataGrid с заголовками фильтров, теперь я понимаю, что для этого нет готового элемента управления и его необходимо создать, и я начал использовать шаблон.
Мой шаблон состоит из элемента управления Label слева, который содержит заголовок заголовка, и элемента управления DatePick справа, который я буду использовать как часть моего процесса фильтрации. Я пытаюсь получить свойство Label.Content внутри моего шаблона, чтобы выбрать значение свойства DataGridTextColumn.Header родительского шаблона.
Я пробовал RelativeSource, TemplatedParent и все остальное, что я есть, я также не смог найти ни одного поста, описывающего мою проблему или решение. Любая помощь будет принята с благодарностью. Благодарю.
Мой код
<UserControl x:Class="CustomControls.ReportsListingControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="100" d:DesignWidth="600">
<UserControl.Resources>
<Style x:Key="ColumnHeaderStyle1" TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="DataGridColumnHeader">
<Grid Width="200" Height="35">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Label Grid.Column="0"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Width="50"
Content="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridTextColumn}}, Path=Header}" />
<DatePicker Grid.Column="1"
HorizontalAlignment="Right"
VerticalAlignment="Center"
Width="30"
BorderThickness="0" Text="" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<Grid>
<DataGrid Name="DataGrid1" >
<DataGrid.Columns>
<DataGridTextColumn HeaderStyle="{StaticResource ColumnHeaderStyle1}" Header="The Text I want displayed in my template label" />
</DataGrid.Columns>
</DataGrid>
</Grid>
1 ответ
Привязать к DataContext
сам:
<Label ... Content="{Binding}" />
DataContext
из DataGridColumnHeader
это Header
сам объект, то есть string
в твоем случае.