【问题标题】:DataGridColumnHeader with StackPanel, bind content of TextBlock/Label to ColumnName, dynamic gridDataGridColumnHeader 与 StackPanel,将 TextBlock/Label 的内容绑定到 ColumnName,动态网格
【发布时间】:2014-11-26 17:55:48
【问题描述】:

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

我有 AutoGenerateColumnHeaders = true,它工作正常。但是,我使用 DataTemplate 用包含标签和按钮的 StackPanel 覆盖标题。我似乎无法弄清楚如何将标签内容绑定到 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 相当陌生,我假设我只是缺少绑定的东西 - 我还在学习。 谢谢。

【问题讨论】:

  • 如果你想让标签只显示标题的内容,只需使用&lt;Label Content="{Binding}",还是需要从列表中获取某个值?
  • 这给了我一个 System.StackOverflow 异常。
  • 抱歉,没有什么可测试的,但DataGridColumnHeader 是一个内容控件,并且由于模板内的任何内容都使用DataGridColumnHeaders dataContext 你应该能够绑定到它,也许试试@ 987654325@

标签: c# wpf xaml


【解决方案1】:

这就是我为了让它工作而做的。我不得不更改 findancestor 以查找 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>

【讨论】:

    猜你喜欢
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-28
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多