2011-05-23 148 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