带有多行标题的WPF DataGrid

时间:2011-05-23 21:02:41

标签: wpf datagrid header

我对一个非常奇怪的网格有一个设计要求......看起来像这样:

grid http://img219.imageshack.us/img219/3444/columns.png

我需要能够对两行中的标题进行排序...因此,如果他们单击“描述”,则按描述排序。如果他们单击“状态”,则按状态排序。使用列标题上的模板,我可以实现外观,但我似乎无法找到一种方法让每个单独的单元作为一个独特的标题。我怎么能这样做呢?

编辑:要创建列标题,我这样做了:

<StackPanel Orientation="Vertical" >
     <Border Margin=".5" Background="{StaticResource DarkBlueBackground}" >
           <Button Margin="6" Style="{StaticResource StaticLinkButton}"">
                <TextBlock HorizontalAlignment="Left" Text="Part Number" MinWidth="40"  />
           </Button>
     </Border>

     <Border Margin=".5" Background="{StaticResource LightBlueBackground}" MinWidth="120">
            <Button  Margin="6" Style="{StaticResource StaticLinkButton}" Content="Part Type"/>
     </Border>
 </StackPanel>

,大部分都有效。问题是,当我有一个特别长的数据项(如长'部分类型')时,它会拉伸列,但我的“部件类型”标题周围的边框不会拉伸。我尝试使用网格而不是堆栈面板,但结果相同。是否有一种相对简单的方法可以使标题中的border / buttons / textblocks延伸到列的整个宽度?

编辑2
显示每个请求的标题模板代码:

<DataGridTemplateColumn.HeaderTemplate>
    <DataTemplate>
        <StackPanel Orientation="Vertical" >
            <StackPanel Orientation="Horizontal">
                <Border Margin=".5" >
                    <Button Margin="6" Style="{StaticResource StaticLinkButton}" >
                        <TextBlock Text="Qty OH" />
                    </Button>
                </Border>
                <Border Margin=".5" >
                    <Button Margin="6" Style="{StaticResource StaticLinkButton}" >
                        <TextBlock Text="Ord Qty" />
                    </Button>
                </Border>
                <Border Margin=".5" >
                    <Button Margin="6" Style="{StaticResource StaticLinkButton}" >
                        <TextBlock Text="Ret Qty" />
                    </Button>
                </Border>
                <Border Margin=".5" >
                    <Button Margin="6" Style="{StaticResource StaticLinkButton}" >
                        <TextBlock Text="Rec Qty" />
                    </Button>
                </Border>
                <Border Margin=".5" >
                    <Button Margin="6" Style="{StaticResource StaticLinkButton}" KeyboardNavigation.IsTabStop="False" >
                        <TextBlock MinWidth="90" MinHeight="27" Text="Quantity" />
                    </Button>
                </Border>
            </StackPanel>
            <Border Margin=".5" Background="{StaticResource LightBlueBackground}">
                <Button ="Part Type" KeyboardNavigation.IsTabStop="False"/>
            </Border>
        </StackPanel>
    </DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>

1 个答案:

答案 0 :(得分:3)

您可以将TextBlocks或其他任何内容包装在“隐形”按钮中并处理其点击或检查一些主要处理程序e.OriginalSource是什么。 (命令也可以是一个选项)

要使按钮“不可见”,您可以应用一种简单的样式,使按钮仅显示其内容:

<Style x:Key="LooklessButtonStyle" TargetType="{x:Type Button}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate>
                <ContentPresenter />
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>