带有StackPanel的DataGridColumnHeader,将TextBlock / Label的内容绑定到ColumnName,动态网格

时间:2014-10-01 19:27:22

标签: c# wpf xaml

我有一个动态生成的DataGrid绑定到我的ViewModel中的DataTable属性。

我有AutoGenerateColumnHeaders = true,它运行正常。但是,我使用DataTemplate来覆盖包含Label和Button的StackPanel的Header。我似乎无法弄清楚如何将Label Content绑定到DataGridColumnHeader。我曾尝试使用和不使用FindAncestor,但我相信以下内容最接近我需要的位置...问题在于标签内容=" {}"

<local:UserControlViewBase.Resources>
    <Style TargetType="DataGridColumnHeader">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate>
                    <Border BorderBrush="Black" BorderThickness="1">
                        <StackPanel Width="Auto" Orientation="Horizontal">
                            <Label Content="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type local:UserControlViewBase}},Path=DataContext.TestList.ColumnName}" Padding="12,0,12,0" HorizontalAlignment="Center" VerticalAlignment="Center" />
                            <Button Content="Ok" Padding="12,0,12,0" HorizontalAlignment="Center" VerticalAlignment="Center" />
                        </StackPanel>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</local:UserControlViewBase.Resources>

//local:UserControlViewBase is just a UserControl with some extra bells and whistles added.

我对WPF很新,我假设我只是错过了绑定的东西 - 我还在学习。 感谢。

1 个答案:

答案 0 :(得分:0)

这就是我为了让它发挥作用所做的。我不得不更改find​​ancestor以查找DataGridColumnHeader而不是用户控件。然后我可以访问Column.Header属性:

<local:UserControlViewBase.Resources>
    <Style TargetType="DataGridColumnHeader">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate>
                    <Border BorderBrush="Black" BorderThickness="1">
                        <StackPanel Width="Auto" Orientation="Horizontal">
                            <Label Width="75" Content="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridColumnHeader}},Path=Column.Header}" Padding="12,0,12,0" HorizontalAlignment="Center" VerticalAlignment="Center" />
                            <Button Content="Ok" Padding="12,0,12,0" HorizontalAlignment="Center" VerticalAlignment="Center" />
                        </StackPanel>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</local:UserControlViewBase.Resources>