2011-05-23 147 views
0

我有一个非常奇怪的网格设计要求......看起来是这样的:WPF DataGrid的多行标头

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> 

回答

3

你可以用任何你在“看不见”的按钮具有的TextBlocks或和处理他们的点击或在一些主要的处理程序检查什么e.OriginalSource是。 (命令也可能是一种选择)

为了使按键“隐身”你可以申请一个简单的风格,这使得该按钮只显示其内容:

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

这就行了,非常感谢。 – drowned 2011-05-24 20:25:24

+0

不客气,很高兴帮助:) – 2011-05-24 20:30:20