問題タブ [dependencyobject]

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 投票する
2 に答える
878 参照

.net - DependencyObject 継承ツリーのカスタマイズ

DependencyObjectおよび で使用されるプロパティ継承ツリー (または継承コンテキスト) に関する十分な情報を見つけるのに苦労していますDependencyProperty

オブジェクト A が論理的な親オブジェクト B であるように、典型的な WPF ページの外側の値継承機能を使用したいと思いDependencyPropertyます。したがって、オブジェクト A のプロパティに割り当てられた値は、ローカルにない限り、オブジェクト B に自動的に伝達されます。 set (FlowDirectionプロパティが WPF で機能するのと少し似ています)。

オブジェクト A とオブジェクト B が から派生しDependencyObject、a の子ではない場合UIElement (つまり、オブジェクト A はそれ自身のルートDependencyPropertyです)、 B が A の子であることを理解するように論理ツリーをどのように確立しますか?

Hillberg Freezable TrickJosh Smith の一連のトリックは 、私が探しているものとはまったく異なります。既存の要素ツリーからプロパティを取得したくありません... 独自の視覚的でない要素ツリーを作成したい... つまり、継承コンテキストを制御したいのです。

この一連の知識がどこに隠れているか知っている人はいますか?

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

wpf - 親凍結可能とは何ですか? このエラーはどういう意味ですか?

次のエラーが表示されます。

親とは異なるスレッドに属する DependencyObject は使用できません

それは一体何の意味ですか?英語ですか?親は凍結されていますか、それとも単に凍結可能ですか? エラーが解消される場合、親をフリーズできないようにする方法はありますか?

何が起こっていますか:

私は WPF アプリに 2 つの opengl winforms コントロールを持っていますが、これまでのところ、すべてがスムーズに機能しています (と思います)。ここで、1 つの winform コントロールがイメージを更新するときに、もう一方も同様に更新するように更新を追加しました。それは実際に機能していましたが、今ではそのエラーが発生しています。コードをステップ実行すると、ランダムな場所でクラッシュが発生します。これは、ガベージ コレクションの障害であると思われます (つまり、別のスレッドでの更新により、ガベージ コレクションが行われる何かが作成され、そのコレクションがランダムな時間に発生します)。

例外はメインの run メソッドでキャッチされ、InvalidOperationException です。

ここでストローをつかんでいます。どこから始めればよいですか?

編集:問題を引き起こしている呼び出しは次のようです:

私はまだそれを追跡しています。その一連の行がコメントアウトされている場合でも、クラッシュは発生し、スレッド ステータスには「ちょうど終了した」スレッドがあります (したがって、ガベージ コレクションの仮定)。

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

wpf - スタイル付きの WPF DependencyObject が与えられた場合、コードでスタイル キーを取得するにはどうすればよいですか?

データにバインドされた一連のコントロールがあり、プログラムでバリデーターをバインディングに追加したいと考えています。現在、ビジュアル ツリーを繰り返し処理してバインディングを含むコントロールを見つけ、これらのコントロールにバリデーターを追加することができます。しかし、特定の検証が必要なコントロールをさらに指定するために、スタイルを使用したいと考えました。したがって、私の XAML は次のようになります。

ここで、optionalNumericTextBoxスタイルは検証エラー テンプレートの追加と、このテキスト ボックスにオプションの数値バリデータを適用する必要があることを示すデコレータの両方として機能します。

この問題は、ビジュアル ツリーをたどり、バインディングを含むコントロールを発見し、使用中のスタイルを特定する必要があるときに発生します。現在、私は試しました

これによりStyleオブジェクトが得られますが、私が知る限り、このオブジェクトには「optionalNumericTextBox」値が含まれていません。キーを特定することさえ可能ですか、それともこの情報は XAML リーダーで失われますか?

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

c# - WPFバインディングの混乱:Composite DependencyObject

次のようなDependencyObjectクラス構成があります。

A、AB、およびACでは、すべてのプロパティが、通常どおり静的プロパティを参照する通常のGetValueおよびSetValue操作を実行します。

現在、クラスA、AB、およびACには、対応するUserControls AGroupBox、ABGrid、ACGridがあります。AGroupBoxにはルートAクラスプロパティがあり、ABGridにはルートABクラスプロパティがあり、ACGridにはルートACクラスプロパティがあります。

ABGridとACGridの両方に機能するバインディングがあります(たとえば、ABGridにはTextプロパティがABのProperty1に双方向にバインドされたTextBoxコントロールが含まれています)。単純なウィンドウを作成し、ABGridをウィンドウの唯一のコンテンツの子とし、設定の背後にあるコードでこれを確認しました。 ABGrid.AB = new AB(); ACGrid.AC = new AC();の同じシナリオ。

問題は、AGroupBoxで同じようにしようとしたときです。XAMLでウィンドウのコンテンツの単一の子としてAGroupBoxを追加し、AGroupBox.Aプロパティをnew A(){AB = new AB()、AC = new AC()};に設定してみます。コントロールのバインドは失敗します。ABとACには、PropertyNプロパティのデフォルト値があります。

私が欠けているものについての洞察はありますか?私がとるべき別のルートはありますか?

編集:追加コメント-文字列プロパティをA(String1)に追加し、それをGroupBoxのText部分にバインドすると、そのプロパティへのバインドは機能しますが、AのACおよびABプロパティには機能しません。

編集-2:David Hayの要求による(すべてのコードは名前空間wpfStackOverflowにあります):

A.cs

B.cs

C.cs

AGroupBox.xaml

AGroupBox.xaml.cs

BGrid.xaml

BGrid.xaml.cs

CGrid.xaml

CGrid.xaml.cs

window1.xaml

Window1.xaml.cs

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

wpf - xaml プロパティを公開するには?

ComboBox サブクラスを作成し、機能を追加しました。

ここで、たとえば TextBox の外部プロパティを公開したいと思います。

これは可能ですか。間違った特定のプロパティを選択したのではないかもしれませんが、私の言いたいことは理解できたと思います。

これは可能ですか?
すべてのプロパティを個別に作成する必要がありますか?

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

wpf - DependencyProperites が変更されたときに DependencyObject のバインディングを呼び出す

内部の DependencyProperties が変更されたときに DependencyObject のバインディングを通知する方法はありますか?

たとえば、次のクラスがあります。

Color1、Color2、および UseBothColors の値を設定する 3 つの個別の双方向バインディングがあります。しかし、BackgroundDef インスタンスのバインドもあり、Brush を作成してボタンの背景 (単一色または 2 つのグラデーション色) を描画する必要があります。私の問題は、DependencyProperties の双方向バインディングがプロパティを更新することですが、明らかにオブジェクト全体が変更されないため、クラス インスタンスのバインディングは呼び出されません。DependencyProperties が変更されたときに DependencyObject のバインディングを呼び出す方法はありますか?

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

dependency-properties - 依存オブジェクトが特定の依存プロパティを実装しているかどうかを判断する方法 (C# / WPF)

私はSystem.Windows.Documents名前空間内のクラスを操作しており、これらのプロパティが特定のクラスに存在するかどうかに応じて、特定の依存関係プロパティの値を条件付きで設定する汎用コードを記述しようとしています。

たとえば、次のメソッドPaddingは、渡された のプロパティに任意の値を割り当てFrameworkContentElementます。

ただし、すべての具体的な実装がプロパティをFrameworkContentElement持っているわけではありません (ありますが、ありません)。そのため、このプロパティを実装する型ではプロパティの割り当てが成功し、そうでない型では暗黙のうちに無視されることを期待します。PaddingParagraphSpan

FrameworkContentElementしかし、プロパティを実装するかどうかに関係なく、のすべての派生物のインスタンスに対して、上記のプロパティの割り当てが成功するようですPadding。割り当てられた値を常に読み取ることができたので、この仮定を行います。

プロパティ値を割り当てる方法に何らかの欠陥があると思います。特定の依存関係プロパティの割り当てが、そのプロパティを実装しないクラスによって無視されるようにするにはどうすればよいですか?

アドバイスありがとうございます。

ティム