在我的应用程序中,我需要更改与数据网格标题相关的属性,如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;
}
答案 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事件。