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}" />
DataGridColumnHeader
的 DataContext
是 Header
对象本身,即您的 string
。
首先,我在离开 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}" />
DataGridColumnHeader
的 DataContext
是 Header
对象本身,即您的 string
。