2013-01-31 43 views
0

我(通過其HeaderStyle屬性)應用以下樣式我DataGridColumns:在WPF的DataGridColumn綁定HeaderStyle

<Style x:Key="MyHeaderStyle" TargetType="DataGridColumnHeader"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate> 
        <TextBlock Text="???" /> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

同樣的樣式應用到每一列,但我需要改變內容的一些方法(如TextBlock文本),具體取決於它是哪一列。我相信DataGridColumnHeader沒有自己的綁定,所以我怎麼能做到這一點?列數會有所不同,所以我不能簡單地爲每個列創建單獨的樣式。

回答

1

使用TemplateBinding - 它允許您觸及ControlTemplate以獲取有關使用此控件模板的實際控件的信息。我的示例將文本塊綁定到以DataGridColumHeader的正常方式聲明的內容。

<Style x:Key="ColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="DataGridColumnHeader"> 
       <TextBlock Text="{TemplateBinding Content}"/> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
+0

這有助於感謝。最終我想在頭文件模板中包含一個按鈕,但我需要將其CommandParameter綁定到可以識別哪個列按鈕被點擊的東西。那麼,有沒有辦法綁定到相應DataGridColumn的屬性(例如DisplayIndex)?或者,當我創建DataGridColumns(我正在以編程方式進行)時,是否有任何方法可以獲取列的相應DataGridColumnHeader,因此我可以設置一個屬性,如Tag(然後我可以將CommandParameter綁定到)? –

+0

沒關係,我找到了解決方案。我意識到Header屬性是對象類型的,所以我可以利用它。在上面的控件模板中,我會做'TextBlock DataContext =「{TemplateBinding Content}」Text =「{Binding FooProperty}」/>'。同樣,對於我的按鈕的CommandParameter - 我可以將它綁定到Header對象中的某種ID或其他列標識符。 –