2016-10-02 5 views
0

私はwidth="*"DataGridTextColumDataGridを持っていると私は、このDataGridTextColumnDataGridTextColumn.Headerの幅を設定したいのですが親の幅(DataGridTextColumn)に設定します。 WPF DataGridTextColumHeaderTemplateバインド幅は、「*」

動作しないコード、理由は私が RelativeSourceが正しく定義されていないよしかし、だから私の質問は、どのように私は DataGridTextColumn.ActualWidthにバインドする DataGridTextColumnHeaderTemplateWidthBindingを定義しますか?下のコード!

<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

DataGridColumnFrameworkElementではないため、VisualTreeには表示されません。これは単なる情報保持者エンティティです。実際にレンダリングされるのは、ColumnごとにDataGridColumnHeaderです。したがって、あなたのHeaderTemplateの内容はこのDataGridColumnHeaderに含まれています。そして、このDataGridColumnHeaderは、そのColumnプロパティを使用して、DataGridColumnとの関連付けを維持します。したがって、

WidthStackPanelからWidth="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=DataGridColumnHeader},Path=Column.ActualWidth, UpdateSourceTrigger=PropertyChanged}"に変更してください。

関連する問題