0

在我的应用程序中,我需要更改与数据网格标题相关的属性,例如 ColumnHeader 字体、字体大小等。由于目前没有相同的属性,我正在通过样式设置器更新它。但问题是对于单个属性更改(如 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;
}
4

1 回答 1

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

于 2012-07-13T05:43:26.650 回答