0

TreeViewItemクラスを拡張して、ツリービューアイテム内に追加のデータを格納できるようにしました。追加した拡張プロパティの1つの値に基づいて、ツリービューアイテムのスタイルを設定できるようにしたいと思います。

これまでのところ:

namespace GX3GUIControls
{
    public class GX3TreeViewItem : TreeViewItem
    {

        public bool Archived { get; set; }
        public object Value { get; set; }
    }
}

<src:GX3ClientPlugin.Resources>
        <Style TargetType="{x:Type Controls:GX3TreeViewItem}">
            <Style.Triggers>
                <DataTrigger Archived="True">
                    <Setter Property="Background" Value="Gray" />
                    <Setter Property="FontStyle" Value="Italic" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </src:GX3ClientPlugin.Resources>

しかし、エラーが発生します-エラー1プロパティ'Archived'がタイプ'DataTriggerに見つかりませんでした

4

3 に答える 3

2

DataTrigger には Archived プロパティはありませんが、Binding プロパティを介して Achived-property をバインドできます。<DataTrigger Binding="{Binding Path=Archived}" Value="True">

Achived プロパティが変更された場合にビューに通知するには、次のいずれかを実行できます。

1. クラスに INotifyPropertyChanged インターフェイスを実装しますGX3TreeViewItem: public class GX3TreeViewItem : TreeViewItem, INotifyPropertyChanged、PropertyChanged イベントを発生させるメソッドを作成します。

private void PropertyChanged(string prop)
{
   if( PropertyChanged != null )
   {
      PropertyChanged(this, new PropertyChangedEventArgs(prop);
   }
}

このメソッドをプロパティのセッターに配置します。

private bool _achived;
public bool Achived
{
   get
   {
      return _achived;
   }
   set
   {
      _achived = value;
      PropertyChanged("Achived");
   }
}

2.またはあなたの財産をDependencyProperty.

于 2012-11-23T14:57:54.550 に答える
0

これは、これを実装する正しい方法ではありません。MVVM Patternをご覧ください。

UI は「余分なデータを保存する」場所として適切ではありません。UIはUI、データはデータ。これは、WPF で間違ったアプローチと間違った考え方を使用して、winform または非 WPF のバックグラウンドを持つ人々が犯した最悪の間違いです。

これは機能しません ( はItemContainerGeneratorクラスTreeViewについて何も知らないか、そのようなクラスのデフォルトの動作をオーバーライドするために余分な作業が必要になるためです。

于 2012-11-23T15:06:43.243 に答える
0

正直なところ、あなたはそれを間違っているようです。これらのプロパティは、データ上にある必要があります。

あなたはこのようなことをすることができます、

Style="{Binding Path=Archived, Converter={StaticResource GetStyle}}"

GetStyle は IValueConverter であり、TreeView imo を拡張する必要はありません。

于 2012-11-23T15:02:55.277 に答える