【问题标题】:C# -WPF DataGridColumnHeader in 2 RowsC# -WPF DataGridColumnHeader in 2 行
【发布时间】:2016-11-01 11:23:21
【问题描述】:

我正在尝试创建一个包含 2 行的 DataGridColumnHeader。 我希望它看起来像这样:

HeaderText 和 ID 是自定义 DataGridColumn 中的 AttachedProperties。 我想使用以下 DataGridColumnHeader 模板显示这两个属性:

<Style TargetType="{x:Type DataGridColumnHeader}">
    <Setter Property="ContentTemplate">
        <Setter.Value>
            <DataTemplate>
                <StackPanel Margin="0">
                    <Border Margin="0"
                            BorderBrush="Black"
                            BorderThickness="0,0,0,1">
                        <TextBlock Text="{Binding Path=HeaderText, RelativeSource={RelativeSource AncestorType={x:Type ctrls:MyDataGridColumn}}}" />
                    </Border>
                    <TextBlock Text="{Binding Path=ID, RelativeSource={RelativeSource AncestorType={x:Type ctrls:MyDataGridColumn}}}" />
                </StackPanel>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

我的自定义列示例:
&lt;ctrls:MyDataGridColumn HeaderText="some text" ID="1" /&gt;

HeaderText 和 ID 不会显示...有什么提示吗?

【问题讨论】:

    标签: c# wpf datagrid columnheader


    【解决方案1】:

    在使用 DataGridColumns 时,我通常使用 Window Resources/DataTemplates 而不是样式。例如:

    <Window.Resources>
         <DataTemplate x:Key="TemplateName">
             <insert stackpanel & TextBlocks here/>
         </DataTemplate>
    </Window.Resources>
    

    然后,在您的 GridView 中,像这样设置您的列:

    <GridViewColumn CellTemplate="{StaticResource TemplateName}"/>
    

    如果这不是您想要的答案,我深表歉意。但这就是我一直实现你所说的目标的方式。如果您有任何问题,请告诉我!

    编辑:我也从未使用过这样的绑定。我举个例子:

    这是一个 gridviewcolumn 的数据模板,它有一个复选框,该复选框绑定到项目源中的 Class 中的 bool 属性:

    <DataTemplate x:Key="IssueTemplate">
        <CheckBox HorizontalAlignment="Center" IsChecked="{Binding IssueMe, Mode=TwoWay}"/>
    </DataTemplate>
    

    编辑 2: 我现在看到您在谈论标题,这使我的回答毫无意义。我很抱歉。我通常会根据具体情况设置标题:

    <GridViewColumn CellTemplate="{StaticResource IssueTemplate}">
        <GridViewColumnHeader HorizontalAlignment="Center">
            <StackPanel HorizontalAlignment="Center">
                <TextBlock Text="Issue" HorizontalAlignment="Center"/>
                    <Viewbox>
                        <Button Content="Check/Uncheck All" FontSize="6" Margin="5 0 5 0" Command="{Binding CheckClick}"/>
                    </Viewbox>
            </StackPanel>
        </GridViewColumnHeader>
    </GridViewColumn>
    

    如果您需要它的风格,那么恐怕我无法提供更多帮助。我最好的建议是看看你的绑定; IMO 看起来有些不对劲。

    祝你好运!

    【讨论】:

      【解决方案2】:

      你现在的Binding 不会工作,因为DataGridColumn 不是Visual,所以它不会参与VisualTree,所以你不能遍历它。它只是一个信息持有者,没有别的。 DataGridColumnHeader 包含一个属性Column,它使您可以访问DataGridColumn

      所以,对这两个属性都这样做:

      <TextBlock Text="{Binding Path=Column.HeaderText, RelativeSource={RelativeSource AncestorType={x:Type DataGridColumnHeader}}}" />
      

      请告知这是否解决了您的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-04
        • 1970-01-01
        • 1970-01-01
        • 2013-09-16
        • 1970-01-01
        • 2011-10-05
        • 1970-01-01
        相关资源
        最近更新 更多