問題タブ [dependency-properties]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
5 に答える
36712 参照

.net - WPF の依存関係プロパティと添付プロパティの違いは何ですか?

(カスタム) 依存関係プロパティと WPF の添付プロパティの違いは何ですか? それぞれの用途は?実装は通常どのように異なりますか?

0 投票する
2 に答える
1652 参照

user-controls - Silverlight 2.0: 依存関係プロパティを変更する前に設定されているかどうかを確認する

Control から継承しているカスタム コントロールに依存関係プロパティ (Foreground) があります。コントロールをロードするときに、ユーザーが依存関係プロパティを設定したかどうか、または値を設定する前にデフォルト値を使用しているかどうかを確認したいと考えています。問題はそれよりも少し複雑です。

コントロールは、ユーザーがプロジェクトに追加するカスタム コントロール ライブラリにあります。彼らがプロジェクトをセットアップしているときに、コントロールのデフォルト値を設定するときに読み取った設定を含む、特定の x:key を使用して app.xaml ファイルに行を追加することができます。ただし、コードまたは xaml で値を設定する場合、このグローバル値で値を設定したくありません。私が話していることを視覚化するのに役立ついくつかのケースを次に示します。

  1. ユーザーは私のライブラリからコントロールを作成し、それを自分のページに配置します。次に、前景を緑に設定します。そのコントロールの前景の値を緑にしたい。

  2. ユーザーは app.xaml に特別な行を追加し、特定の種類のすべてのコントロールの前景を赤にしたいと述べています。その種のすべてのコントロールの前景の値を赤にしたい。

  3. ユーザーは app.xaml に特別な行を追加し、特定の種類のすべてのコントロールの前景を赤にしたいと述べています。次に、1 つのコントロール (xaml 内) の前景の値を黄色に設定します。その種類のすべてのコントロールの前景の値を、別の方法で黄色に指定されているものを除いて、赤にしたいと考えています。

コントロールをロードするときに、依存関係プロパティを読み取って、値が設定されているかどうか、またはスタイルで定義されているデフォルト値であるかどうかを確認したいと考えています。それがデフォルト値の場合、app.xaml ファイルから特別な行を読み取り、前景をその色に設定します。

0 投票する
1 に答える
2852 参照

c# - 基本クラスの依存関係プロパティに PropertyChangedCallback を追加するにはどうすればよいですか?

System.Windows.Controls.UserControl から派生したクラスがあり、FrameworkElement.Margin 依存関係プロパティに PropertyChangedCallback を追加する必要があります。

これは私の C# コードからどのように達成されますか? MSDN でこれの良い例を見つけることができません。

0 投票する
2 に答える
6328 参照

c# - Silverlight での UIElementCollection DependencyProperty の追加

UserControlオブジェクトのコレクションを含むことができる依存関係プロパティを に追加したいと考えていUIElementます。コントロールを派生させてそのプロパティをPanel使用する必要があると提案するかもしれませんChildrenが、私の場合、それは適切な解決策ではありません。

私はUserControlこのように変更しました:

そして、私は次のように使用しています:

残念ながら、アプリケーションを実行すると次のエラーが発生します。

コレクション構文を使用してプロパティを設定するセクションでは、次のように明示的に述べられています。

[...] UIElementCollection は構築可能なクラスではないため、[UIElementCollection] を XAML で明示的に指定することはできません。

問題を解決するにはどうすればよいですか? 代わりに別のコレクションクラスを使用するだけで解決できUIElementCollectionますか? はいの場合、使用する推奨のコレクション クラスは何ですか?

0 投票する
3 に答える
2268 参照

c# - 読み取り専用の依存関係プロパティに別のプロパティの値を反映させる *クリーンな* 方法はありますか?

以下のコードは私の現在の解決策です。

このコードが何をしているのかを理解するのに数分かかる場合は、ya と聞きます

これがあったとしても、これは醜い混乱です。私は別の方法を見つけるために殺します(しかし、それであなたが応答するのを思いとどまらせないでください... :-)。なんてこった、コンバーターのコードを削除して (実質的に) 省略したことさえありますが、このコードを見ると、まだ失読症のように感じます。

私が模倣しようとしているものの良い例は、FrameworkElement.ActualWidth プロパティです。Width プロパティが変更されるたびに、またはコントロールが再描画されるたびに、またはそれ以外のときに、ActualWidth プロパティがどのように計算され、再割り当てされるか知っていますか? ------

開発者の観点からは、データ バインディングが懸命に行われているように見えます。
ただし、ActualWidth は読み取り専用の依存関係プロパティです。マイクロソフトは、それを機能させるために、この巨大なコードのゴミ穴を通過する必要があるのでしょうか? それとも、データ バインディング システムの既存の機能を利用する簡単な方法はありますか?

0 投票する
1 に答える
418 参照

c# - プロパティ値に変更がなかった場合、IValueConverter からの依存関係プロパティの割り当てを「キャンセル」することは可能ですか?

クラスの依存関係プロパティにデータ バインディングを設定しています。また、他の要素に基づいてこの値の計算を処理する IValueConverter もあります。私の質問のコンテキストは、IValueConverter.Convert メソッド内にあります。

#1
計算された戻り値が現在のプロパティ値と等しい場合、論理的な変更がないため、フレームワークにSetValueを気にしないように指示できますか? または、フレームワークはこれを自動的に検出し、内部でプロパティを設定する時間を無駄にしませんか?

#2
計算された戻り値がこのプロパティに対して無効である場合、プロパティを DependencyProperty.UnsetValue に設定するのではなく、現在の値のままにするようにフレームワークに指示できますか?

0 投票する
1 に答える
6414 参照

c# - 既存の依存関係プロパティのコールバックにロジックを追加するにはどうすればよいですか?

PropertyChangedCallback を UIElement.RenderTransformOriginProperty に追加しようとしています。PropertyMetadata をオーバーライドしようとすると、例外がスローされます。

MSDN と Google を検索しましたが、思いついたのはこれだけです。DependencyPropertyDescriptor.AddValueChanged は、その投稿のある時点で提案されていますが、これはインスタンスごとのコールバックではないため、私の問題は解決しません。

この例外の意味がまったくわかりません。私が間違っていることを誰かが知っていますか?

0 投票する
4 に答える
1494 参照

.net - カスタム *書き込み専用* 依存関係プロパティを作成するにはどうすればよいですか?

書き込み専用の依存関係プロパティを作成するための手順を知る必要があります。DependencyProperty クラスには書き込み専用プロパティ用の特別な "Register" メソッドがないことがわかりますが、RegisterAttached メソッドが私がやろうとしていることに適用できるかどうかはわかりません。

このプロパティは、単純な CLR プロパティではなく、依存関係プロパティである必要があります。内部的には、私のクラスは、安定性を維持するために、このプロパティに PropertyChangedCallback を必要とします。


Pro C# 2008 and the .NET 3.5 Platform, Page 1061に明確に記載されているため、書き込み専用の依存関係プロパティを作成できることは知っています。
ただし、これは、同じページで「依存関係プロパティ」と「書き込み専用」を見つけることができる唯一の場所です。そして、この著者は、基本的な読み取り/書き込み依存関係プロパティ以外の手順を実際に読者に示す必要はないと考えていたようです。もちろん、この本は大雑把かもしれませんが、この本はかなり標準的に見えるので、著者が正しいというのはかなり安全な賭けだと思います. インターネット上で情報が不足しているのは、一般的にこのようなプロパティを作成する必要がある人がいないという事実に起因すると思います.

独自の書き込み専用の依存関係プロパティを作成したいというのは、非常に疑わしいと思います。私が望むところは理にかなっていることを保証します。私のクラスには、値を設定するオブジェクトにのみ役立つプロパティがあります。後で別のオブジェクトがこのプロパティの値を要求した場合、セッターの元のコンテキストを知らなければ、値から合理的な意味を理解することはできません。

このプロパティは、情報提供を目的として使用することを意図したものではありません。外部オブジェクトがこのようにプロパティ値を使用しようとすることは、問題があり、危険であり、セキュリティ リスクです。したがって、このプロパティでの読み取り操作を禁止するのが最善の設計だと思います。私のクラスを使用する人は誰でも、クラスを意図したとおりに使用せざるを得ないことに気付くでしょう。

0 投票する
2 に答える
162 参照

.net - 読み取り専用の依存関係プロパティを作成できますか?

この依存関係プロパティは、読み取り操作のみにアクセスできるようにする必要があります。外部オブジェクトはそれに値を割り当てることができません。

0 投票する
1 に答える
2680 参照

c# - バインディングでユーザー コントロールのプロパティを変換しようとすると、無効なキャスト例外が発生する

テキスト ボックスを持つユーザー コントロールがあります。UserControl に同じ名前の DependencyProperty を実装して、texbox の Text プロパティを公開しようとしました。したがって:

私のアプリケーションでは get 部分が正常に動作しているようです。ただし、両方の UserControls の Text プロパティが空の文字列であるかどうかを確認するコンバーターを使用して、ボタンの IsEnabled プロパティをこれらの UserControls の 2 つの Text プロパティにバインドしようとしました。アプリケーション ウィンドウが読み込まれると、次のエラーが表示されます。

System.InvalidCastException は処理されませんでした Message="MS.Internal.NamedObject 型のオブジェクトを System.String 型に変換できません。"

Convert メソッドは次のようになります。

値[0] と値[1] は両方とも、例外がスローされたときに値 DependencyProperty.UnsetValue を持ちます。

どこで間違ったのですか?