2012-07-13 57 views
0

在我的應用程序中,我需要更改與ColumnHeader Font,fontsize等datagrid標題相關的屬性。由於目前沒有同一個屬性,因此我通過Style setters 。但問題在於單個屬性的更改(如FontSize),我必須創建SetterBase的整個集合並更新setterbase集合中的其他屬性。是否有任何其他方式來更新屬性,如在這種情況下。通過樣式更新Datagrid列標題屬性

代碼片段:在WPF

set 
{ 
Style m_ColumnHeaderStyle = new Style(typeof(DataGridColumnHeader)); 
m_ColumnHeaderStyle.Setters.Add(m_ColumnFontWeightProperty); 
m_ColumnHeaderStyle.Setters.Add(m_ColumnFontSizeProperty); 
m_ColumnHeaderStyle.Setters.Add(m_ColumnFontItalicProperty); 
m_ColumnFont = new Setter(DataGridColumnHeader.FontFamilyProperty, new FontFamily(value)); 
m_ColumnHeaderStyle.Setters.Add(m_ColumnFont); 
this.MyDataGrid.ColumnHeaderStyle = m_ColumnHeaderStyle; 
} 

回答

0

樣式必須更新附加價值,所以你可以在XAML聲明一次風格的能力:

<DataGrid > 
     <DataGrid.ColumnHeaderStyle> 
      <Style TargetType="DataGridColumnHeader"> 
       <Setter Property="FontFamily" Value="{Binding HeaderFont}"/> 
      </Style> 
     </DataGrid.ColumnHeaderStyle> 
    </DataGrid> 

魔術發生在綁定和有幾種的。

public partial class MainWindow : Window, INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    private FontFamily _headerFont; 

    public FontFamily HeaderFont 
    { 
     get 
     { 
      return _headerFont; 
     } 
     set 
     { 
      _headerFont = value; 

      PropertyChanged(this, new PropertyChangedEventArgs("HeaderFont")); 
     } 
    } 

    public MainWindow() 
    { 
     InitializeComponent(); 
     DataContext = this; 
    } 
} 

PropertyChanged事件在屬性更改時觸發是非常重要的。

+0

謝謝,但我必須將更改爲。你知道爲什麼會這樣嗎? – Kris 2012-07-13 06:24:05

+0

在我的例子中,我使用'DataContext = this;'來設置DataContext - 所有綁定指向的默認對象。在你的綁定中,你明確地指向名爲window的可視樹元素,這也是正確的。這是這個強大功能的很多用法之一。 – Rafal 2012-07-13 06:46:33

+0

當我使用DATACONTEXT = THIS時,它不起作用。後來我們使用Window作爲綁定的元素。 – Kris 2012-07-13 09:47:50