値を強制するのとデフォルト値と

依存関係プロパティや、添付プロパティで持っている機能に「強制」がある。
その名の通り強制なので、ローカル値よりも優先順位が高い。
デフォルト値は、優先順位が最も低い値であるものの、既定値なので、頻繁に設定する。
自分で依存関係プロパティや添付プロパティを作成するときはなおさらだ。

最近仕事で実装した中にまさに強制を実装したばかりだったので、メモっておこう。
ListBoxやDataGrid等のItemsControl系のアイテムをドラッグ・アンド・ドロップできるようにするためのビヘイビアクラスを作った。
その際に作成した依存関係プロパティが↓のようなもの。

/// <summary>
/// 移動中のアイテムの透明度を取得/設定します。
/// </summary>
public double DragAdornerOpacity {
get {return (double)GetValue(DragAdornerOpacityProperty);}
set {SetValue(DragAdornerOpacityProperty, value);}
}

/// <summary>移動中のアイテムの透明度</summary>
public static readonly DependencyProperty DragAdornerOpacityProperty =
DependencyProperty.Register("DragAdornerOpacity", typeof(double),
typeof(DragDropBevavior),
new UIPropertyMetadata(0.5D, null, OnCoerceDragAdornerOpacity));

/// <summary>
/// DragAdornerOpacityプロパティ(移動中の透明度)の値を強制するメソッド
/// </summary>
/// <param name="dpObj">対象オブジェクト</param>
/// <param name="value">値</param>
/// <returns>強制された値</returns>
private static object OnCoerceDragAdornerOpacity(DependencyObject dpObj, object value) {
var opacity = System.Convert.ToDouble(value);

if (opacity < 0D) {
//0より小さければ、0.1を返す
return 0.1D;
} else if (opacity >= 1D) {
//1以上であれば、0.9を返す
return 0.9D;
}

return value;
}

この「OnCoerceDragAdornerOpacity」というメソッドが強制を行うためのメソッド。
強制する必要があるかどうかもチェックしている。
この透明度を表すOpacity(double)が取れる値の範囲は0以上1以下なのだ。
マイナス値や1を超える値を設定しても動作させるために、この強制が必要となる。
なお、プロパティ作成時に設定している「0.5D」がデフォルト値。
仕事では、アニメーションなんかはあまり使わないので、強制は滅多に使わない。デフォルト値はいっぱい使う。
スポンサーサイト
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: WPF4 | コメント: 0 | トラックバック: 0


この記事へのコメント

コメントの投稿

非公開コメント


サイドバー背後固定表示サンプル

当ブログに書かれたソースコードは流用自由です。

バグ、スペルミス等はありうる事です。

ご利用の際は自己責任でお願いしますm(_ _)m