WPF - 将自定义 DataGridTextColumn 模板的内容 属性 绑定到 parent 的 属性

WPF - Binding custom DataGridTextColumn template's Content property to parent's property

首先,我在离开 WPF 几年后又回到了它,我以前对它有所了解并开发了一些 windows 但现在我已经生疏了。 我正在尝试使用过滤器 headers 构建 DataGrid,现在我明白没有现成的控件需要创建,我已经开始使用模板。

我的模板由左侧的 Label 控件组成,其中包含 header 的标题,右侧的 DatePick 控件将用作过滤过程的一部分。我试图在我的模板中获取 Label.Content 属性 以选择模板 parent.

的 DataGridTextColumn.Header 属性 值

我已经尝试了 RelativeSource、TemplatedParent 和其他一切,但我在这里也找不到任何 post 描述了与我的类似问题或解决方案。任何帮助将不胜感激。谢谢

我的代码

<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>

绑定到 DataContext 本身:

<Label ... Content="{Binding}" />

DataGridColumnHeaderDataContextHeader 对象本身,即您的 string