通过样式更新Datagrid列标题属性

时间:2012-07-13 05:01:18

标签: wpf styles

在我的应用程序中,我需要更改与数据网格标题相关的属性,如ColumnHeader Font,fontsize等。由于目前没有相同的属性,我通过样式设置器更新此属性。但问题是单个属性更改(如FontSize)我必须创建SetterBase的整个集合并更新单个属性以及setterbase集合中的其他属性。是否有任何其他方法来更新属性,如在此方案中。

代码段:

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;
}

1 个答案:

答案 0 :(得分:0)

wpf中的样式可以更新附加值,因此您可以在xaml中声明样式一次:

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

神奇发生在Binding中,它的种类很少。

 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事件。