0

私のアプリケーションでは、ColumnHeader Font、fontsize などのデータグリッド ヘッダーに関連するプロパティを変更する必要があります。現在、同じプロパティが 1 つもないため、スタイル セッターを使用してこれを更新しています。しかし、問題は単一のプロパティ変更 (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>

バインディングでは魔法が起こり、その種類はほとんどありません。

 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 に答える