問題タブ [adornerlayer]

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

wpf - WPFで、DataGridの上にAdornerLayerを表示する方法

codeplexのWPFデータグリッドを使用しています。私はDatagridTemplateColumnを使用しており、各列のコンテンツを表示するためのデータテンプレートを作成しました。

ここで、datagridの任意のコントロールにフォーカスがあるときに、ユーザーにヘルプメッセージを表示する必要があります。このために私は装飾層を使用することを考えました。ComboBoxをロードしたイベントを使用して、そのadrornerレイヤーにアクセスしました。次に、ツールチップと同様に表示されるものを使用して、独自の装飾レイヤーを追加しました。以下はコードです。

PEAdornerレイヤーはこれです::

ここで問題は次のとおりです。datagridでどのように表示されているかのスクリーンショットを添付しています。データグリッドに4行を超える場合は、問題ありません。以下はスクリーンショットです。

ヘルプテキストを修正する

データグリッドの行数が少ない場合、この装飾者はデータグリッド内に入り、ユーザーには表示されません。スクリーンショットは下にあります ハーフヘルプテキスト

この装飾レイヤーをDataGridの上に配置するにはどうすればよいですか?私を助けてください !!!

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

wpf - ボタンのクリック時に装飾のテキストを更新する

メイン ウィンドウを灰色のキャンバスで覆い、中央にテキスト ブロックを配置して、他のウィンドウで作業しているときにステータス テキストを表示するカスタム アドナーを作成しました。

私が現在行っていることは、リソースから必要な adornerElement (つまり、テキストブロックを含むキャンバス) をフェッチし、それをビュー コンストラクターの adorner に次のように渡すことです -

しかし、いくつかのシナリオでは、テキストブロック内のそのテキストを更新したいのですが、他のウィンドウのボタンをクリックすると、テキストを動的に更新する方法がありますか??

リソース ファイルの装飾要素 -

追加のコードまたはアプローチが必要な場合はお知らせください..

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

c# - 装飾は、装飾された要素の上にあるコントロールと重なります

ねえ、私は装飾品に問題があります。装飾されるコントロールの各コーナーに 1 つずつ、合計 4 つの Thumb コントロールを持つサイズ変更用の装飾を作成しました。コントロールはキャンバス上に描画されており、ユーザーはそれを選択してサイズを変更できます。キャンバスは ZoomBoxPanel コントロールでホストされ、基本的に ScaleTransform と TranslateTransform を全体に適用して、ズームとパンのサポートを提供します。

問題は、アイテムがズーム パネルの境界外にあり、期待どおりにアイテムがトリミングされている場合 (ClipToBounds = true を設定した場合など)、依然として装飾が表示されることです! これを防ぐ方法を誰か教えてください。

証拠。黒い四角が選択されたもので、2 つのサイズ変更つまみが表示され (右)、その他は表示されません (左)。

ありがとう!!

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

.net - WPFアドナーのポイントは何ですか?

私は最近、クリックアンドドラッグを使用して特定の形状を描画できるCanvasを備えた、会社用の描画コンポーネントを開発しました。シェイプごとに、2つのアドナーをAdornerLayerに配置しました。1つはヒット検出を増やすため(基本的にはシェイプの境界を数ピクセル超える透明な長方形)、もう1つはサイズ変更用(コーナーに4つのサムコントロール)です。

しかし、コンポーネントの機能のいくつかを実装するときに、すべての装飾者に関連する多くの問題に遭遇しました。

  • Canvas自体とは別のビジュアルツリーにあるため、すべてのプレビューイベントをキャプチャしました。これは予想外のことでしたが、あまり気に入らなくても回避策を見つけました。AdornerDecoratorを使用してもこの問題は解決しませんでした。実装した選択装飾は、プレビューイベントのブラックホールです。

  • Canvasに図形のz-index操作(後ろに送信、前に移動など)を実装したとき、期待どおり、Panel.SetZIndexを使用して正常に機能しました。しかし、装飾者は別のビジュアルツリーにいます!そのため、それらは影響を受けず、選択装飾者がヒットを検出していた形状の上にそれらの形状があったとしても、選択装飾者は他のすべての形状の上にまだありました。例:Shape1、SelectionAdorner1。Shape2、SelectionAdorner2。Shape1はShape2の上部(後でキャンバスに追加)にあるため、重なり合っています。したがって、それをクリックすると、SelectionAdorner1によって検出されます。ZIndexを操作して送り返しましたが、Shape2が一番上にあり、Shape1と重なっています。Shape2の上部をクリックしましたが、クリックはSelectionAdorner2ではなくSelectionAdorner1によって検出されます。これは特に厄介でした。それで、どうやらAdornersは別のビジュアルツリー上にあるため、ZIndexesを尊重していません。シェイプのZIndexとSelectionAdornerのZIndexの間にDataBindingを作成する(および手動で設定する)ことで、これを解決しようとしました。しかし、これは問題を解決しませんでした。AdornersのZIndexを変更しても、画面への表示方法には影響しませんでした。何かが足りなかったのかもしれませんが、Adornersは物事を簡単にするために作られているはずなので、それほど難しいことではありません。私が思いついた唯一の解決策は、すべての装飾者を手動で削除し、それらを1つずつ手動で再度追加し、最後に一番上にあるはずの装飾者を追加することでした。それは遅れましたが、うまくいきました。シェイプのZIndexとSelectionAdornerのZIndexの間にDataBindingを作成する(および手動で設定する)ことで、これを解決しようとしました。しかし、これは問題を解決しませんでした。AdornersのZIndexを変更しても、画面への表示方法には影響しませんでした。何かが足りなかったのかもしれませんが、Adornersは物事を簡単にするために作られているはずなので、それほど難しいことではありません。私が思いついた唯一の解決策は、すべての装飾者を手動で削除し、それらを1つずつ手動で再度追加し、最後に一番上にあるはずの装飾者を追加することでした。それは遅れましたが、うまくいきました。シェイプのZIndexとSelectionAdornerのZIndexの間にDataBindingを作成する(および手動で設定する)ことで、これを解決しようとしました。しかし、これは問題を解決しませんでした。AdornersのZIndexを変更しても、画面への表示方法には影響しませんでした。何かが足りなかったのかもしれませんが、Adornersは物事を簡単にするために作られているはずなので、それほど難しいことではありません。私が思いついた唯一の解決策は、すべての装飾者を手動で削除し、それらを1つずつ手動で再度追加し、最後に一番上にあるはずの装飾者を追加することでした。それは遅れましたが、うまくいきました。なぜなら、装飾者は物事を簡単にするために作られることになっているからです。私が思いついた唯一の解決策は、すべての装飾者を手動で削除し、それらを1つずつ手動で再度追加し、最後に一番上にあるはずの装飾者を追加することでした。それは遅れましたが、うまくいきました。なぜなら、装飾者は物事を簡単にするために作られることになっているからです。私が思いついた唯一の解決策は、すべての装飾者を手動で削除し、それらを1つずつ手動で再度追加し、最後に一番上にあるはずの装飾者を追加することでした。それは遅れましたが、うまくいきました。

  • 次に、AdornersはClipToBoundsを尊重しません!描画を行っていたキャンバスでClipToBounds=trueを設定しました。これは正常に機能しましたが、気の利いた装飾者は引き続き機能します。これに対する解決策は比較的簡単でした。各Shapeの上にAdornerDecoratorを追加しただけです。理想的なソリューションIMOではありませんが、十分に単純なソリューションです。

  • 装飾者は、装飾された要素に対して実行されるLayoutTransformsに常にうまく反応するとは限りません。キャンバスの上に、ズーム機能とパン機能を実装するパネルがあります。アニメーションを使用して、ズームインとズームアウトをよりスムーズにしました。しかし、アニメーションを使用すると、私の愛好家は猿になりました!最初のズームではサイズ変更を無視して同じサイズと位置を維持し、2番目のズームでは装飾された要素の前のサイズに拡大縮小します。それは意味がありませんでした!私が見つけた唯一の解決策は、アニメーションを無効にすることでした。これはありがたいことに機能しました

他にどのような問題があったかはよく覚えていませんが、これでAdornersの有用性について疑問に思うほどでした。次のプロジェクトでは、これを使用しないことを真剣に検討しています。これは、私が説明したものと似ています。 。

それで、これらの一見有用であるが信じられないほど迷惑なものを使用することの長所は何である可能性があるかを誰かに教えてもらえますか?

ありがとう。

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

wpf - FrameworkElement.VisualChildrenCount が保護されているのはなぜですか?

私の質問の背景は次のとおりです。

  1. System.Windows.Documents.AdornerLayer特定が空かどうかを知りたいです。
  2. 「わかりました、チェックしmyAdornerLayer.VisualChildrenCount > 0ます。」
  3. 「まあ、財産AdornerLayer.VisualChildrenCountは守られている」System.Windows.FrameworkElement.VisualChildrenCount(保護されているものをオーバーライドします。)
  4. 「ふむ……それは仕方ない。myAdornerLayer.VisualChildrenCountリフレクション経由でアクセスするだけだ」
  5. 「一方で、これを行うと、何らかの悪い副作用が生じる可能性があります。何らかのVisualChildrenCount理由で保護されている可能性があります。スタックオーバーフローに問い合わせます」.

AdornerLayerリフレクションを使用するのが悪い考えである場合、が空かどうかを調べる別の方法について提案はありますか?

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

c# - RichTextBoxでのAdornerレイヤーの印刷

各単語の上に画像レイヤー をrichTextBox含むエディターがあります。ドキュメントを適切な形式で印刷し、画像レイヤーも印刷したいと思います。 これを達成する方法はありますか? 試しましたが、装飾レイヤーが印刷されませんでした。adorner
adorner

PrintDialog

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

wpf - 装飾者が現れない

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

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

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

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

wpf - 装飾層の検証が他のコントロールの背後に表示されるようにする方法

ユーザー検証を行う WPF アプリケーションがあります。ドキュメントによると、これは他のすべてのレイヤーの上に表示される adorner レイヤーでレンダリングされます。

スクリーンショットでは、これがまさに私が望んでいるものではないことがわかります。Extended WPF ToolkitChildWindowからの「Alert details」というポップアップがあります。装飾層の後ろに配置されます。アドナーレイヤーの前にポップアップを表示するにはどうすればよいですか?

私はすでに ChildWindow を非常に高く設定しようとしPanel.ZIndexましたが、それは違いはありません。


スクリーンショット

0 投票する
0 に答える
350 参照

wpf - WPFリッチテキストボックスのアドナーの上にマウスを移動するとキャレットの位置が失われる

リッチテキストボックスに装飾レイヤーがあります。単語のつづりが間違っているときはいつでも、richtextbox の adornerlayer に adorner を追加します。アドナーを右クリックしてそのイベントをキャプチャできるようにしたいのですが、マウスが装飾された要素の上にあるときにリッチテキストボックスのキャレット位置を失いたくありません。

IsHitTestVisible=False を設定してみました。これにより、装飾された要素の上にあるときにマウスがポインターに変化しないようにして、基になるリッチテキストボックスをクリックできるようにしますが、マウスの右ボタンのクリックキャプチャが複雑になります。

これにより、右マウスボタンのクリックをキャプチャできますが、adornedElement の下部を右クリックした場合にのみ機能するようです。adornedElement の本文をクリックしようとしても、hitTesting で見つかりません。

私はこれを正しく行っていますか、またはその上の要素がマウスイベントを受け入れることができる必要があるときに、基になるコントロールがカーソルを維持できるようにするより良い方法がありますか?

助けてくれてありがとう!

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

c# - Wpf AdornerLayerの子のzオーダーを変更するにはどうすればよいですか?

画像編集アプリケーションがあり、AdornerLayerに追加されるカスタム装飾があります。ユーザーがAdornerをクリックしたときに、それを一番上に移動します。つまり、別の装飾者の上にドラッグした場合、最初のクリックが一番上の装飾者にキャッチされるようにします。

AdornerLayerの子要素のzオーダーを変更する方法がわかりません。それは私がそれらを分類することを可能にしないようです。Adornerを削除して再度追加しても、最上位にはなりません。