DependencyProperty.UnsetValue プロパティ
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
プロパティが存在することを示すのではなく null
、プロパティ システムによって使用される静的な値を指定しますが、その値はプロパティ システムまたはアプリ コードによって設定されません。
public:
static property Platform::Object ^ UnsetValue { Platform::Object ^ get(); };
static IInspectable UnsetValue();
public static object UnsetValue { get; }
var object = DependencyProperty.unsetValue;
Public Shared ReadOnly Property UnsetValue As Object
プロパティ値
未設定の値の Sentinel 値。
例
次の使用例は、 ReadLocalValue を使用して既存のローカル値をチェックします。 を返 UnsetValue
さないで示されているように、ローカル値がある場合は、 ClearValue を呼び出して既存のローカル値が削除されます。
public static bool ClearSetProperty(DependencyObject targetObject, DependencyProperty targetDP)
{
if (targetObject == null || targetDP == null)
{
throw new ArgumentNullException();
}
object localValue = targetObject.ReadLocalValue(targetDP);
if (localValue == DependencyProperty.UnsetValue)
{
return false;
}
else
{
targetObject.ClearValue(targetDP);
return true;
}
}
注釈
UnsetValue
は、依存関係プロパティ システムが要求された依存関係プロパティ値を決定できないシナリオで使用される sentinel 値です。 UnsetValue は、ほとんどの参照型の値に対して有効なプロパティ値であり、依存関係プロパティのメタデータで頻繁に使用される DefaultValue であるためnull
、 ではなくnull
使用されます。
UnsetValue
は DependencyObject.GetValue 呼び出しから返されることはありません。
依存関係プロパティに対して DependencyObject.GetValue を呼び出すと、次のいずれかの条件が常に満たされます。
- 依存関係プロパティには、メタデータで設定された既定値があり、その値が返されます。 この値は、プロパティ メタデータの DefaultValue から取得される場合があります。 これは である
null
可能性があります。 - 値の優先順位によって他のいくつかの値が確立され (スタイルが適用された、 Binding が評価されたなど)、既定値は関連しなくなりました。 特に設定されていても、これは まだ である
null
可能性があります。 値の優先順位の詳細については、「 依存関係プロパティの概要」を参照してください。
DependencyObject.ReadLocalValue は、要求されたプロパティがローカルに設定されていない場合にを返します UnsetValue
。
注意
依存関係プロパティを既定値の UnsetValue
に登録しないでください。 これは、プロパティ コンシューマーにとって混乱を招き、プロパティ システム内で意図しない結果を招く可能性があります。
UnsetValue
コンバーターがソース値を変換できない場合は、依存関係プロパティへのデータ バインディングでの変換を提供する IValueConverter 実装から返す必要があります。 コンバーターは 、IValueConverter.Convert でその場合の例外をスローしないでください。これらは UnhandledException で処理を追加する必要がある実行時例外として表示されます。さらに悪いことに、ユーザーには実際の実行時例外として表示されます。 コンバーターの実装は、失敗したバインディングは何も行わず、値を提供しないという一般的なバインディング パターンに従う必要があります。これは、 UnsetValue
バインディング エンジンが認識するその場合の sentinel 値ではなく null
です。 詳しくは、「データ バインディングの詳細」をご覧ください。