WPF - 将自定义DataGridTextColumn模板的Content属性绑定到父级的属性
问题描述:
首先,我在回到WPF后几年将它留在后面,之前我知道一些它,并开发了几个窗口,但现在我已经生锈了。 我想构建一个带有过滤器头的DataGrid,现在我明白没有现成的控件,需要创建,我已经开始使用模板。WPF - 将自定义DataGridTextColumn模板的Content属性绑定到父级的属性
我的模板由左侧的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>
答
绑定到DataContext
本身:
<Label ... Content="{Binding}" />
一个DataGridColumnHeader
的DataContext
是Header
对象本身,即你的情况string
。
这是令人讨厌的简单。十分感谢你的帮助!!! :) –