【发布时间】:2014-08-22 15:06:43
【问题描述】:
我正在尝试为 DataGridColumnHeader 准备模板。模板应该很简单。
附加的依赖属性 csdpp:CalendarProperties.EnumDay 应该只是 DataGridColumnHeader 所属的特定日期,然后转换器应该只返回当天的正确标签。
如果我将 AncestorType 设置为 DataGridTextColumn(这就是我想要的)并留下这样的代码:
<Style TargetType="DataGridColumnHeader" x:Key="DayHeaderStyle">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBox Text="{Binding
RelativeSource={RelativeSource FindAncestor, AncestorType=DataGridTextColumn}, Mode=OneWay,
Path=(csdpp:CalendarProperties.EnumDay),
Converter={StaticResource IndexToDayLabelConverter}}"/>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
什么都没有发生。转换器甚至没有被调用。
但是如果我把代码改成这样:
<Style TargetType="DataGridColumnHeader" x:Key="DayHeaderStyle">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBox Text="{Binding
RelativeSource={RelativeSource FindAncestor, AncestorType=DataGrid}, Mode=OneWay,
Path=(csdpp:CalendarProperties.EnumDay),
Converter={StaticResource IndexToDayLabelConverter}}"/>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
(DataGrid切换DatagridTextColumn,DataGrid也有附加属性(下))
Converter 被调用,并且作为值从 DataGrid 传递附加属性。为什么这适用于 DataGrid 而不适用于 DataGridTextColumn?请帮忙。
带有 DataGrid 和 DataGridTextColumn 的代码:
<DataGrid Grid.Row="1" Grid.Column="1"
x:Name="_shiftDataGrid"
ItemsSource="{Binding ElementName=Root, Path=PersonShiftgroupings.ShiftPersons}"
DataContext="{Binding ElementName=Root, Path=PersonShiftgroupings.ShiftPersons}"
AutoGenerateColumns="False"
csdpp:CalendarProperties.EnumDay="Fri">
<DataGrid.Columns>
<DataGridTextColumn
csdpp:CalendarProperties.EnumDay="Wed"
HeaderStyle="{StaticResource DayHeaderStyle}">
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
任何帮助将不胜感激。
【问题讨论】:
-
这是因为 DataGridColumn 不在 DataGrid 的 VisualTree 中, DataGridColumnHeader 是,我不知道在这种情况下如何编写绑定,它会涉及一些试验和错误,你可以给我一个示例?这是 DataGridColumnHeader 中的 Column 属性:msdn.microsoft.com/en-us/library/…
标签: wpf xaml styles attached-properties