問題タブ [adorner]

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 に答える
4310 参照

c# - 装飾層をクリアすることは可能ですか?

WPF の装飾レイヤーの概念を誤解している可能性がありますが、TextBlockaStackPanelの装飾レイヤーに a を追加することができました。

装飾レイヤーをクリアするにはどうすればよいですか? たとえば、装飾層StackPanelがなくなったTextBlockのでしょうか。

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

c# - AdornerLayout または Adorner または装飾されたコントロールから AdornerPanel にアクセスしますか?

コントロールへの装飾として単純な Textblock を追加しようとしています。しかし、装飾されたコントロールのすぐ上に配置したい.

これは装飾の作成です(問題はこのコードに依存していません):

私が達成できないことは、装飾されたコントロールの上に装飾を配置することです。この MSDN コード サンプルを使用したいと思います。これは、AdornerPanel を使用してポジショニングを行います...

ただし、この MSDN コード サンプルを適用するために AdornerPanel オブジェクトにアクセスする方法がわかりませんでした...装飾されたコントロール、AdornedLayout、または Adorner のいずれからも...

AdornerPanel と AdornerLayout の間の WPF クラス階層を明確に理解していないことは認めます。

どんな助けでも感謝します。

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

wpf - 装飾されたコントロールの境界の外に拡張する装飾を使用できますか?

小さなビジュアルを表示するコントロールがありますが、大きなエラー メッセージを表示する必要があります。検証テンプレートが表示されていますが、装飾されたコントロールの境界にクリップされているようです。装飾された値をその外にレンダリングさせる簡単な方法はありますか?

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

wpf - 144人以上の装飾者を使用

破損することなく働く装飾家の最大数は144人のようです

たくさんのオブジェクトを含むScrollViewがあり、それらの多くには装飾が付属しています。最初の144の装飾者は正しく配置されていますが、残りは正しく配置されていません。非常に多い場合は例外的な状況であることに注意してください。通常、装飾者はまったくいません。それでも、その例外的な機会でもこれが適切に機能することを望んでいます。

この恣意的な(そして非常に低い)制限が私にどのように感じさせるかはさておき、このバグの実際的な回避策はありますか?

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

c# - HasError が false の場合、検証エラー装飾がクリアされない

前書き

null を防ぐために s がアタッチされ、最小範囲と最大範囲があり、10 進数以外の値を防ぐためのイベント ハンドラーをDecimalTextBox持つユーザー コントロールを作成しました。ValidationRule利用した

検証をすぐに有効にしたいので、バインディングについて (そして、最小値と最大値が変更される前に問題がありましたが、検証が再評価されていませんでした)。

私が行った null 検証は、「AllowNull」依存プロパティの値に依存しています。コントロールが true を指定すると、値が null の場合でもコントロールは有効になります。false の場合、null は許可されません。このプロパティのデフォルトはFalse


問題

true特定の UserControl で使用するときに AllowNull を設定しています。残念ながら、 が に設定されているためValidatesOnTargetUpdatedtruexaml が AllowNull を に設定する前にコントロールが検証されますが、コントロールはtrueデフォルトfalse設定のままです。

のテキストへのバインディングTextBoxもまだ解決されていないため、ロード前にエラーが発生します。そのため、ロード前は null を許可せず、テキストの値は null です。

これは、ロード後に検証が新しい AllowNull 値 (true) で再評価され、エラーが削除されるため、すべてうまくいきます。

ただし、赤い検証装飾はそのままです。それを取り除く方法が完全にはわかりません。


THE CODE テキストボックス usercontrol の xaml:


コントロールのコード ビハインド:


検証ルール (#注: これらは ValidationRules 名前空間内にあります):

FrameworkElement バインディングが使用されるため、ValidationRules はバインド先の依存関係プロパティを持つことができます。これにより、コントロールの外で最小値と最大値を指定できます。


まとめ

ロード後に(コントロール自体とその内部の両方HasErrorについて)を使用してチェックしたところ、falseが生成されました。Validation.GetHasError(DecimalBox)TextBox

削除するとValidatesOnTargetUpdated="True"赤が表示されないことはわかっていますが、必要です。では、検証が再評価されているのに、赤い境界線の装飾が消えないのはなぜですか?

Validation クラスまたはその静的メソッドについてはよくわかりませんが、装飾を取り除く何かがそこにあります。ClearInvalid メソッドは、提供するエラーがないため、役に立ちません。

何か案は?

u_u


編集

さらに調査を行ったところ、次のことがわかりました。

  1. ロード後にテキストを最大値よりも大きい量に変更してから元に戻すと、エラー装飾が消えます
  2. プログラムでコントロール ロード イベント内の Text 依存関係プロパティの値を最大値よりも大きい値に変更し、それを元に戻しても、装飾はそのままです。
  3. ロード後にテキストを null 値に変更してから元に戻すと、装飾はまだそこにあります。
  4. ビューモデルのコンストラクター内のテキストにバインドされているビューモデルのプロパティの値を変更しても、装飾はそのままです。
  5. ビューモデルのコンストラクター内のテキストにバインドされたビューモデルのプロパティの値を最大値よりも大きい値に変更してから元に戻しても、装飾はそのままです。
  6. ボタンでテキストにバインドされたビューモデルのプロパティの値を別の値に変更してから元に戻すと、装飾が消えます
  7. ボタンを使用してテキストにバインドされたビューモデルのプロパティの値を maximum より大きい値に変更してから元に戻すと、装飾が消えます

私はまだかなり困惑しています。私は次のような方法UpdateLayout()を試し、アドナーを別のコントロールに移動して、Validation.SetValidationAdornerSite. 挑戦し続けますが、本当に何をすべきかわかりません。

u_u


2回目の編集

私がその間に行ったことは、TextBoxの周りにAdornerDecoratorを配置し、テキストボックスのロードイベントで最大値を1に変更し、値を2に変更してから、テキストボックスを更新するために元に戻すことでした。

これは機能していましたが、その恐ろしいコードの原因となるアイデアが嫌いでした。

ただし、このソリューションはもはや実行できません。これらの DecimalTextBoxes の 1 つにバインドされたプロパティの 1 つを変更したプロパティで処理を行っていたコードがいくつかありました。次に、プロパティが変更され、load イベントで元に戻されたため、他のコードも実行され、エラーが発生していました。これよりも良い解決策を見つけなければなりません。

検証アドナーを更新する方法を知っている人はいますか?

u_u

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

c# - WPFのバグ?FlowDirectionがRightToLeftの場合、Adorner内のTextBlockは反転テキストを表示します

テキストボックス内に透かしを表示するためにadornerを使用しています。しかし、ウィンドウのFlowDirectionをRightToLeftに設定すると、adorner(テキストブロック)内のテキストが逆になります!!!

それはバグですか、それとも何かを変更する必要がありますか?

ここに画像の説明を入力してください

そしてここに装飾者の完全なコードがあります:

そして私はそれを使用します:

前もって感謝します :)

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

c# - AdornedElement でスケーリングしない装飾を作成する方法は?

簡単に言えば、FrameworkElement にアタッチするサイズ変更/サイズ変更の装飾を作成して、ユーザーが通常装飾を使用する場合は要素のサイズを変更できるようにし、下部を使用する場合は要素を再スケーリングできるようにします (必ずしも均一ではありません)。 - 右側の装飾を行い、SHIFT ボタンを押したままにします。

私はこれを達成するためにさまざまな方法を試しましたが、最終的には常に装飾者自体がスケーリングされてしまうため、最終的には巨大になったり、大きな境界線ができたりします。それ以来、ウィンドウに相対的な位置を使用してそれらを配置し始め、AdornedElement に適用される RenderTransform を無視しましたが、非常に異常な動作が発生します。

まず、要素を (おおよそ) 2 倍以上に拡大すると、再拡大の動作が壊れてあちこちにジャンプし始めます。

明らかに、この動作は説明するよりも見る方が簡単です。そのため、問題とそれを引き起こすコードを示すサンプル ソリューション (VS 2010) を添付しました。

VS 2010 ソリューションの例

誰かが私に正しい方向への指針を与えることができるなら、私がそれをすべて間違っていると言ってください! 笑。

また、下にある装飾された要素が回転された場合、この装飾も最終的には正しく表示される必要があることに注意してください。現時点ではそうではありません。

更新: NVM を満足させるために、彼のやり方で解決策を示します: NVM のやり方

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

wpf - SurfaceScrollViewer がドラッグ スクロールしないのはなぜですか?

Windows タブレット PC 用のアプリケーションを作成しています。SurfaceScrollViewerを使用して、ウィンドウの右側に垂直方向のスクロール可能なリストをレンダリングするカスタム コントロールを作成しました。コントロールは Adorner を使用して Window の adorner レイヤーに自身を追加し、ウィンドウ コンテンツの上にレンダリングできるようにします。

これは非常にうまく機能しますが、サーフェス スクロール ビューアはマウス ホイールまたはスクロール バーでしかスクロールできません。スクロールバーを非表示にして、ユーザーがタッチでリストをドラッグできるようにしたいのですが、これはうまくいきません。このプロジェクトの他の場所でコントロールを使用しましたがSurfaceScrollViewer、これはうまくいきました。この問題は、コントロールがどのように構築されたか、またはコントロールが AdornerLayer にあることが原因であると推測しています。Surface にタッチを登録することと関係がありますか? 奇妙なことSurfaceButtonに、リスト内のコントロールは正常に機能します。

ヘルプやアドバイスをいただければ幸いです。これは基本的にカスタム コントロールです。サイズを小さくするためにいくつかのバインディングのビットとピースを削除し、周囲の Window/AdornerLayer/Adorner 要素を追加してコンテキストに入れました。

EDIT - アドナーは、実際には、ウィンドウの子であるグリッドのアドナー レイヤーに追加されます。以下の XAML を更新しました。

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

wpf - 装飾者が現れない

Canvas を含む UserControl を使用しています。キャンバスの子として、装飾者によるコンテンツ コントロールがあります。装飾層が表示されない理由は、おそらく装飾層が切断されているためです。すべてが作成され、添付されます。装飾レイヤーは、ビジュアル ツリーの非常に高い位置にあります。装飾レイヤーは、UserControl の外側に配置されます。

機能する基本的な移動メカニズムを実装したため、それが作成されたことはわかっていますが、デコレータは表示されません。

デコレータを表示するには何をする必要がありますか?