ビヘイビアの作成
(2017/05/17 14:15:26 created.)
(2017/05/24 15:49:41 modified.)
コントロールに対するビヘイビアの一例をサンプルとして作成してみます。
IsEnabled 添付プロパティの変更イベントハンドラを次のように変更し、他のメソッドも追加します。
SampleBehavior.cs
namespace Tips_Behavior.Views.Behaviors
{
using System.Windows;
using System.Windows.Controls;
/// <summary>
/// サンプルのビヘイビアを表します。
/// </summary>
public class SampleBehavior
{
/// <summary>
/// IsEnabled 添付プロパティの定義
/// </summary>
public static readonly DependencyProperty IsEnabledProperty = DependencyProperty.RegisterAttached("IsEnabled", typeof(bool), typeof(SampleBehavior), new PropertyMetadata(false, OnIsEnabledPropertyChanged));
/// <summary>
/// IsEnabled 添付プロパティを取得します。
/// </summary>
/// <param name="target">対象とする DependencyObject を指定します。</param>
/// <returns>取得した値を返します。</returns>
public static bool GetIsEnabled(DependencyObject target)
{
return (bool)target.GetValue(IsEnabledProperty);
}
/// <summary>
/// IsEnabled 添付プロパティを設定します。
/// </summary>
/// <param name="target">対象とする DependencyObject を指定します。</param>
/// <param name="value">設定する値を指定します。</param>
public static void SetIsEnabled(DependencyObject target, bool value)
{
target.SetValue(IsEnabledProperty, value);
}
/// <summary>
/// IsEnabled 添付プロパティ変更イベントハンドラ
/// </summary>
/// <param name="sender">イベント発行元</param>
/// <param name="e">イベント引数</param>
private static void OnIsEnabledPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
var control = sender as Button;
if (control == null)
return;
var isEnabled = GetIsEnabled(control);
if (isEnabled)
{
control.Click += OnClick;
}
else
{
control.Click -= OnClick;
}
}
/// <summary>
/// Click イベントハンドラ
/// </summary>
/// <param name="sender">イベント発行元</param>
/// <param name="e">イベント引数</param>
private static void OnClick(object sender, RoutedEventArgs e)
{
var control = sender as Button;
if (control == null)
return;
control.Content = "Don't touch me!";
control.IsEnabled = false;
}
}
}
SampleBehavior.IsEnabled 添付プロパティは System.Windows.Button クラスに対して有効に機能するもので、IsEnabled 添付プロパティ値が true のとき、クリックイベントに登録したメソッドが処理されるようになっています。
このようなビヘイビアを定義してアプリケーションを実行すると次のようになります。
IsEnabled 添付プロパティが false であるボタンのほうは押しても何も起きませんが、true であるボタンは指定されたイベントハンドラが処理されていることがわかります。また、Button コントロールではないものに true が指定されていても無視されていることがわかります。
Tweet