2行中的C#-WPF DataGridColumnHeader

时间:2016-11-01 11:23:22

标签: c# wpf datagrid columnheader

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

enter image description here

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>

我的自定义列的示例:
<ctrls:MyDataGridColumn HeaderText="some text" ID="1" />

HeaderText和ID不会显示......任何提示?

2 个答案:

答案 0 :(得分:0)

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

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

然后,在GridView中,将列设置为:

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

如果这不是您正在寻找的答案,我道歉。但这就是我一直实现你所说的目标的方式。如果您有任何问题,请告诉我们!

编辑:我也从未使用类似的绑定。让我举个例子:

这是gridviewcolumn的datatemplate,它有一个复选框,绑定到items source中的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一起看。

祝你好运!

答案 1 :(得分:0)

您现在的Binding无效DataGridColumn不是Visual,因此它不会参与VisualTree,因此您无法遍历它。它只是一个信息持有者,没有别的。 DataGridColumnHeader包含一个属性Column,可让您访问DataGridColumn

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

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

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