2016-10-02 65 views
0

我有一个DataGridwidth="*"DataGridTextColum(其中多,让他们都平分),我想设置这个DataGridTextColumnDataGridTextColumn.Header的宽度到其父宽度(DataGridTextColumn)。WPF DataGridTextColumHeaderTemplate绑定宽度的TextColumnWidth“*”

然而代码不能正常工作,原因是我没有定义RelativeSource正确的,所以我的问题是,如何定义BindingWidth内的DataGridTextColumnHeaderTemplate绑定到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降低命名,我必须做的量。

谢谢!

回答

1

DataGridColumn不是FrameworkElement,所以它不会出现在VisualTree。它仅仅是一个信息持有者实体。实际得到的是每ColumnDataGridColumnHeader。因此,您的HeaderTemplate内容将出现在此DataGridColumnHeader中。此DataGridColumnHeader使用其Column属性来维护其与DataGridColumn的关联。所以,

WidthStackPanel更改为Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=DataGridColumnHeader},Path=Column.ActualWidth, UpdateSourceTrigger=PropertyChanged}"