2017-12-30 56 views
0

役割取得と設定extentions

public static class TreeViewItemBehavior 
{ 

public static bool GetIsBroughtIntoViewWhenSelected(TreeViewItem treeViewItem) 
{ 
    return (bool)treeViewItem.GetValue(IsBroughtIntoViewWhenSelectedProperty); 
} 

public static void SetIsBroughtIntoViewWhenSelected(
    TreeViewItem treeViewItem, bool value) 
{ 
    treeViewItem.SetValue(IsBroughtIntoViewWhenSelectedProperty, value); 
} 

public static readonly DependencyProperty IsBroughtIntoViewWhenSelectedProperty = 
    DependencyProperty.RegisterAttached(
    "IsBroughtIntoViewWhenSelected", 
    typeof(bool), 
    typeof(TreeViewItemBehavior), 
    new UIPropertyMetadata(false, OnIsBroughtIntoViewWhenSelectedChanged)); 

static void OnIsBroughtIntoViewWhenSelectedChanged(
    DependencyObject depObj, DependencyPropertyChangedEventArgs e) 
{ 
    TreeViewItem item = depObj as TreeViewItem; 
    if (item == null) 
     return; 

    if (e.NewValue is bool == false) 
     return; 

    if ((bool)e.NewValue) 
     item.Selected += OnTreeViewItemSelected; 
    else 
     item.Selected -= OnTreeViewItemSelected; 
} 

static void OnTreeViewItemSelected(object sender, RoutedEventArgs e) 
{ 
    // Only react to the Selected event raised by the TreeViewItem 
    // whose IsSelected property was modified. Ignore all ancestors 
    // who are merely reporting that a descendant's Selected fired. 
    if (!Object.ReferenceEquals(sender, e.OriginalSource)) 
     return; 

    TreeViewItem item = e.OriginalSource as TreeViewItem; 
    if (item != null) 
     item.BringIntoView(); 
} 

#endregion // IsBroughtIntoViewWhenSelected 

}

「ゲット」の役割は何と接頭辞付きのメソッドを「設定」しますか?このクラスを追加し、XAMLでTreeView.ItemControlsStyle Setterプロパティを静的依存プロパティに設定し、その値を "True"に設定します。私はBOTH getおよびset接頭辞方法コメントアウトして再コンパイルする場合、インテリセンスは、スタイルのプロパティはNULLにすることはできませんと文句を言い、まだコンパイルはまだ成功し、

static void OnIsBroughtIntoViewWhenSelectedChanged(
DependencyObject depObj, DependencyPropertyChangedEventArgs e) 

の機能がを維持しています。

いずれの方法でもメソッド名が変更されても、不平は残っていますが、1つのメソッドだけがコメントアウト/変更されていれば不平はありません。

これは、プロパティの取得と設定を実装する代替手段ですか?コントロールは自動的にXAMLの 'Get/Set + PropertyName'拡張メソッドを探しますか? get/setエクステンションが無効/コメントアウトされているときに、どのように/これが機能するのですか?クラスとxaml refは、指定されたリンクで見つけることができます。私は指定されたXAMLプロパティrefをx:Staticと宣言して修正しましたが、これが唯一の変更です。任意の洞察力をありがとう...

答えて

1

ドキュメントを参照:

抜粋:

DependencyProperty.RegisterAttached Method (String, Type, Type, PropertyMetadata, ValidateValueCallback)

は、それらの作成が詳細に記載されているattached-properties-overviewにあなたを導き

添付プロパティを作成する方法

クラスが添付プロパティを他の型で使用するために厳密に定義している場合、そのクラスはDependencyObjectから派生する必要はありません。ただし、添付プロパティを依存プロパティとして持つWPFモデル全体に​​従う場合は、DependencyObjectから派生する必要があります。

のフィールドpublicstaticreadonlyを宣言することにより、添付プロパティを依存プロパティとして定義します。このフィールドは、RegisterAttachedメソッドの戻り値を使用して定義します。フィールド名は、識別されたフィールドの名前を指定したWPFパターンと、それが表すプロパティを指定するために、プロパティの文字列が付加された添付プロパティ名と一致する必要があります。添付プロパティのためをアクセサとして添付プロパティプロバイダは、staticGet PropertyName意味Set PropertyName意味方法を提供しなければなりません。これを行わないと、不動産システムがあなたの添付プロパティを使用できなくなります。

など

通常のDependencyProperties構文とは異なる方法で宣言するだけです。

関連する問題