DependencyProperty.ReadOnly プロパティ

定義

この DependencyProperty インスタンスによって識別される依存関係プロパティが読み取り専用の依存関係プロパティであるかどうかを示す値を取得します。

public:
 property bool ReadOnly { bool get(); };
public bool ReadOnly { get; }
member this.ReadOnly : bool
Public ReadOnly Property ReadOnly As Boolean

プロパティ値

true 依存関係プロパティが読み取り専用の場合。それ以外の場合は false

次の例では、さまざまな依存関係プロパティ フィールドから既定のメタデータと依存関係プロパティ識別子プロパティを取得し、その情報を使用してテーブルにデータを設定し、"メタデータ ブラウザー" を実装します。

pm = dp.GetMetadata(dp.OwnerType);
MetadataClass.Text = pm.GetType().Name;
TypeofPropertyValue.Text = dp.PropertyType.Name;
DefaultPropertyValue.Text = (pm.DefaultValue!=null) ? pm.DefaultValue.ToString() : "null";
HasCoerceValue.Text = (pm.CoerceValueCallback == null) ? "No" : pm.CoerceValueCallback.Method.Name;
HasPropertyChanged.Text = (pm.PropertyChangedCallback == null) ? "No" : pm.PropertyChangedCallback.Method.Name;
ReadOnly.Text = (dp.ReadOnly) ? "Yes" : "No";
pm = dp.GetMetadata(dp.OwnerType)
MetadataClass.Text = pm.GetType().Name
TypeofPropertyValue.Text = dp.PropertyType.Name
DefaultPropertyValue.Text = If((pm.DefaultValue IsNot Nothing), pm.DefaultValue.ToString(), "null")
HasCoerceValue.Text = If((pm.CoerceValueCallback Is Nothing), "No", pm.CoerceValueCallback.Method.Name)
HasPropertyChanged.Text = If((pm.PropertyChangedCallback Is Nothing), "No", pm.PropertyChangedCallback.Method.Name)
    [ReadOnly].Text = If((dp.ReadOnly), "Yes", "No")

注釈

読み取り専用の依存関係プロパティは、Register メソッドではなく、RegisterReadOnly メソッドを呼び出すことによって、プロパティ システム内に登録されます。 添付プロパティは読み取り専用として登録することもできます。 RegisterAttachedReadOnlyを参照してください。

読み取り専用の依存関係プロパティでは、メタデータのオーバーライドや値の設定などのメタデータ操作を実行するために、DependencyProperty識別子ではなく、DependencyPropertyKey識別子が必要です。 GetLocalValueEnumeratorまたは識別子を公開する別の API を呼び出してDependencyProperty識別子のコレクションを取得した場合は、ReadOnly値を確認してから、SetValueを呼び出すか、その依存関係プロパティ識別子を入力パラメーターとして使用OverrideMetadataして、識別子が表す依存関係プロパティが読み取り専用でないことを確認します。 ReadOnlyの値が依存関係プロパティにtrueされている場合、メタデータまたはDependencyProperty識別子から、その依存関係プロパティのDependencyPropertyKey識別子への参照を取得するプログラムによる方法はありません。読み取り専用の依存関係プロパティに対してSetValue(DependencyPropertyKey, Object)を呼び出すには、識別子を静的フィールドとして使用できる必要があります。

カスタム依存関係プロパティを作成し、読み取り専用として登録する場合は、CLR ラッパー プロパティの get アクセサーのみを定義する必要があります。 そうしないと、バッキング依存関係プロパティへのアクセスと比較して、クラスのプロパティ ラッパーのオブジェクト モデルが混乱します。 詳細については、「 カスタム依存関係プロパティ 」または 「Read-Only 依存関係プロパティ」を参照してください。

適用対象

こちらもご覧ください