【问题标题】:WPF DataGrid with multi-line headers具有多行标题的 WPF DataGrid
【发布时间】:2011-05-23 21:02:41
【问题描述】:

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

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>

,这在大多数情况下都有效。问题是,当我有一个特别长的数据项(如长的“部件类型”)时,它会拉伸列,但我的“部件类型”标题周围的边框不会拉伸。我也尝试使用网格而不是堆栈面板,但结果相同。有没有一种相对简单的方法可以让标题中的边框/按钮/文本块伸展到列的全宽?

编辑 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>

【问题讨论】:

    标签: wpf datagrid header


    【解决方案1】:

    您可以将 TextBlocks 或您拥有的任何内容包装在“不可见”按钮中并处理它们的点击或在一些主处理程序中检查 e.OriginalSource 是什么。 (命令也可以是一个选项)

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

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

    【讨论】:

      猜你喜欢
      • 2011-11-19
      • 2013-06-22
      • 2014-10-05
      • 2013-07-20
      • 1970-01-01
      • 1970-01-01
      • 2019-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多