WPF DataGridTextColumHeaderTemplate绑定宽度到"*"的TextCo
本文关键字:quot TextCo DataGridTextColumHeaderTemplate 绑定 WPF | 更新日期: 2023-09-27 18:09:49
我有一个DataGrid
和DataGridTextColum
的width="*"
(它们的倍数,所以它们都是等分的),我想把这个DataGridTextColumn
的DataGridTextColumn.Header
的宽度设置为它的父宽度(DataGridTextColumn
)。
然而代码不起作用,原因是我没有定义RelativeSource
正确,所以我的问题是,我如何在DataGridTextColumn
的HeaderTemplate
内定义Binding
到Width
以绑定到DataGridTextColumn.ActualWidth
?下面的代码!
<DataGridTextColumn Width="*" Binding="{Binding Username}" CanUserReorder="False" CanUserSort="False" x:Name="DataGridTextColumn">
<DataGridTextColumn.HeaderTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Background="Red" MouseLeftButtonDown="EventSetter_OnHandler" Width="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType=DataGridTextColumn},Path=ActualWidth, UpdateSourceTrigger=PropertyChanged}">
<Label>Username</Label>
</StackPanel>
</DataTemplate>
</DataGridTextColumn.HeaderTemplate>
</DataGridTextColumn>
如果我将绑定源更改为ElementName,一切都像预期的那样工作,但是我想使用RelativeSource来减少我必须做的命名量。
谢谢!
DataGridColumn
不是FrameworkElement
,所以它不会出现在VisualTree
中。它仅仅是一个信息持有实体。实际渲染的是每个Column
对应一个DataGridColumnHeader
。因此,您的HeaderTemplate
内容将出现在此DataGridColumnHeader
中。这个DataGridColumnHeader
使用它的Column
属性来维持它与DataGridColumn
的关联。
将StackPanel
的Width
更改为Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=DataGridColumnHeader},Path=Column.ActualWidth, UpdateSourceTrigger=PropertyChanged}"
。