1


1

私は私たちのアプリケーションのフォームのために*コントロールを構築する*ためにアタッチドビヘイビアが必要かどうかを判断しようとしています。

それゆえ、私は*アタッチドビヘイビアを*作成*する方法を知りたいだけでなく、それらが問題を解決するために*使用されている*実際のインスタンスを見たいです。 このMSDNの記事を使用して、役に立つと思われる方法で添付プロパティを持つUserControlを作成しました。特定の子要素が*強調表示*または強調表示されていない。

この例は問題なく動作しますが、どこでロジックを* highlight *または強調しないようにしますか * child *要素の背景色を変更しますか?

  • XAML:*


ビハインドコード:

System.Windowsを使用します。 System.Windows.Controlsを使用します。 System.ComponentModelを使用します。システムを使用する。

名前空間TestAttachedProperties2343 {パブリック部分クラスExtendedStackPanel:StackPanel {Public static readonly

SetIsHighlighted(UIElement要素、ブール値){element.SetValue(IsHighlightedProperty、value); public static Boolean GetIsHighlighted(UIElement element){return(Boolean)element.GetValue(IsHighlightedProperty);} }

public ExtendedStackPanel(){InitializeComponent(); }}}

1 Answer


1


これは非常に単純な例です。ユーザーがボタンをクリックしたときにメッセージを表示する添付の動作です。 メッセージはビヘイビア自体の依存関係プロパティを介してカスタマイズできます。

動作コード:

パブリッククラスMyBehavior:Behavior {public static readonly DependencyProperty MessageProperty = DependencyProperty.Register( "Message"、typeof(string)、typeof(MyBehavior)、new PropertyMetadata( "Default message"));

public MyBehavior():base(){}

パブリック文字列Message {get {return(string)GetValue(MessageProperty); set {SetValue(MessageProperty、value);} }}

保護されたオーバーライドvoid OnAttached(){base.OnAttached(); AssociatedObject.Click = new RoutedEventHandler(AssociatedObject_Click); }

保護されたオーバーライドvoid OnDetaching(){base.OnDetaching(); AssociatedObject.Click  -  = new RoutedEventHandler(AssociatedObject_Click); }

void AssociatedObject_Click(オブジェクト送信側、RoutedEventArgs e){MessageBox.Show(メッセージ); }}

動作を使用するXAML


ここで重要なのは、 OnAttached`と OnDetached`メソッドをオーバーライドしなければならないということです。 ここでは、関連する要素内で制御したいイベントにハンドラをアタッチ/デタッチし、ハンドラ内で必要なことをすべて行います。 これは、ビジュアルコントロールにインタラクティブ機能を追加するための非常に強力で柔軟な方法です。

更新

基本の `Behavior <>`クラスは `System.Windows.Interactivity.dll`アセンブリの中にあります。これはSilverlighランタイムの一部ではありませんが、Microsoft Expression Blend 3と共にインストールされます。 とにかく、このアセンブリは自由に再配布することができるようです(ここを参照してください。