0

我正在尝试创建一个包含 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>

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

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

4

2 回答 2

0

使用 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>

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

祝你好运!

于 2016-11-01T12:57:34.427 回答
0

你的 presentBinding不会工作,因为DataGridColumnis not a Visual,所以它不会参与VisualTree,所以你不能遍历它。它只是一个信息持有者,没有别的。DataGridColumnHeader而是包含一个属性Column,可让您访问DataGridColumn.

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

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

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

于 2016-11-01T15:57:51.780 回答