DataGrid – ColumnのWidthを取得する(C# WPF)

C#

同じDataGridの中からなので簡単に取得できるかと思ったのですが、トリッキーでした。
最初は下のようにElementNameで簡単に取得できると思ったのですが甘かった。

Width="{Binding ElementName=hogehoge, Path=Width}"
Binding datagrid column width
Ihavetwodatagridswithonecolumneach.First:<DataGrid.Columns><DataGridTextColumnx:Name="FilterTextCol01"IsReadOnly="False"Wid...

DataGrid Columnsは抽象オブジェクトなので、logical treeやvisual treeに現れない。
そこにはnamescopeがないのでElementNameを使ってのBindingはできない。
という事らしいです。

ElementNameではなく、Source={x:Reference Hogehoge}, Path=ActualWidh}で行けました。

<DataGrid>
    <DataGrid.GroupStyle>
        <GroupStyle>
            <GroupStyle.HeaderTemplate>
                <DataTemplate>
                    <StackPanel Background="LightBlue" Orientation="Horizontal">
                        <DataGridCell Content="{Binding Name}" Width="{Binding Source={x:Reference CategoryColumn}, Path=ActualWidth}"/>
                        <DataGridCell Content="FUGA" Width="{Binding Source={x:Reference JanuaryColumn}, Path=ActualWidth}" />
                    </StackPanel>
                </DataTemplate>
            </GroupStyle.HeaderTemplate>
        </GroupStyle>
    </DataGrid.GroupStyle>
    <DataGrid.Columns>
        <DataGridTextColumn x:Name="CategoryColumn" Header="Category" Binding="{Binding PaidForCategory}" />
        <DataGridTextColumn x:Name="JanuaryColumn" Header="1月" Binding="{Binding January}" />
    </DataGrid.Columns>
</DataGrid>

コメント