問題タブ [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.
wpf - WPFで、DataGridの上にAdornerLayerを表示する方法
codeplexのWPFデータグリッドを使用しています。私はDatagridTemplateColumnを使用しており、各列のコンテンツを表示するためのデータテンプレートを作成しました。
ここで、datagridの任意のコントロールにフォーカスがあるときに、ユーザーにヘルプメッセージを表示する必要があります。このために私は装飾層を使用することを考えました。ComboBoxをロードしたイベントを使用して、そのadrornerレイヤーにアクセスしました。次に、ツールチップと同様に表示されるものを使用して、独自の装飾レイヤーを追加しました。以下はコードです。
PEAdornerレイヤーはこれです::
ここで問題は次のとおりです。datagridでどのように表示されているかのスクリーンショットを添付しています。データグリッドに4行を超える場合は、問題ありません。以下はスクリーンショットです。
データグリッドの行数が少ない場合、この装飾者はデータグリッド内に入り、ユーザーには表示されません。スクリーンショットは下にあります
この装飾レイヤーをDataGridの上に配置するにはどうすればよいですか?私を助けてください !!!
wpf - ボタンのクリック時に装飾のテキストを更新する
メイン ウィンドウを灰色のキャンバスで覆い、中央にテキスト ブロックを配置して、他のウィンドウで作業しているときにステータス テキストを表示するカスタム アドナーを作成しました。
私が現在行っていることは、リソースから必要な adornerElement (つまり、テキストブロックを含むキャンバス) をフェッチし、それをビュー コンストラクターの adorner に次のように渡すことです -
しかし、いくつかのシナリオでは、テキストブロック内のそのテキストを更新したいのですが、他のウィンドウのボタンをクリックすると、テキストを動的に更新する方法がありますか??
リソース ファイルの装飾要素 -
追加のコードまたはアプローチが必要な場合はお知らせください..
c# - 装飾は、装飾された要素の上にあるコントロールと重なります
ねえ、私は装飾品に問題があります。装飾されるコントロールの各コーナーに 1 つずつ、合計 4 つの Thumb コントロールを持つサイズ変更用の装飾を作成しました。コントロールはキャンバス上に描画されており、ユーザーはそれを選択してサイズを変更できます。キャンバスは ZoomBoxPanel コントロールでホストされ、基本的に ScaleTransform と TranslateTransform を全体に適用して、ズームとパンのサポートを提供します。
問題は、アイテムがズーム パネルの境界外にあり、期待どおりにアイテムがトリミングされている場合 (ClipToBounds = true を設定した場合など)、依然として装飾が表示されることです! これを防ぐ方法を誰か教えてください。
証拠。黒い四角が選択されたもので、2 つのサイズ変更つまみが表示され (右)、その他は表示されません (左)。
ありがとう!!
.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の有用性について疑問に思うほどでした。次のプロジェクトでは、これを使用しないことを真剣に検討しています。これは、私が説明したものと似ています。 。
それで、これらの一見有用であるが信じられないほど迷惑なものを使用することの長所は何である可能性があるかを誰かに教えてもらえますか?
ありがとう。
wpf - FrameworkElement.VisualChildrenCount が保護されているのはなぜですか?
私の質問の背景は次のとおりです。
System.Windows.Documents.AdornerLayer
特定が空かどうかを知りたいです。- 「わかりました、チェックし
myAdornerLayer.VisualChildrenCount > 0
ます。」 - 「まあ、財産
AdornerLayer.VisualChildrenCount
は守られている」System.Windows.FrameworkElement.VisualChildrenCount
(保護されているものをオーバーライドします。) - 「ふむ……それは仕方ない。
myAdornerLayer.VisualChildrenCount
リフレクション経由でアクセスするだけだ」 - 「一方で、これを行うと、何らかの悪い副作用が生じる可能性があります。何らかの
VisualChildrenCount
理由で保護されている可能性があります。スタックオーバーフローに問い合わせます」.
AdornerLayer
リフレクションを使用するのが悪い考えである場合、が空かどうかを調べる別の方法について提案はありますか?
c# - RichTextBoxでのAdornerレイヤーの印刷
各単語の上に画像レイヤー
をrichTextBox
含むエディターがあります。ドキュメントを適切な形式で印刷し、画像レイヤーも印刷したいと思います。
これを達成する方法はありますか?
試しましたが、装飾レイヤーが印刷されませんでした。adorner
adorner
PrintDialog
wpf - 装飾者が現れない
Canvas を含む UserControl を使用しています。キャンバスの子として、装飾者によるコンテンツ コントロールがあります。装飾層が表示されない理由は、おそらく装飾層が切断されているためです。すべてが作成され、添付されます。装飾レイヤーは、ビジュアル ツリーの非常に高い位置にあります。装飾レイヤーは、UserControl の外側に配置されます。
機能する基本的な移動メカニズムを実装したため、それが作成されたことはわかっていますが、デコレータは表示されません。
デコレータを表示するには何をする必要がありますか?
wpf - 装飾層の検証が他のコントロールの背後に表示されるようにする方法
ユーザー検証を行う WPF アプリケーションがあります。ドキュメントによると、これは他のすべてのレイヤーの上に表示される adorner レイヤーでレンダリングされます。
スクリーンショットでは、これがまさに私が望んでいるものではないことがわかります。Extended WPF ToolkitChildWindow
からの「Alert details」というポップアップがあります。装飾層の後ろに配置されます。アドナーレイヤーの前にポップアップを表示するにはどうすればよいですか?
私はすでに ChildWindow を非常に高く設定しようとしPanel.ZIndex
ましたが、それは違いはありません。
wpf - WPFリッチテキストボックスのアドナーの上にマウスを移動するとキャレットの位置が失われる
リッチテキストボックスに装飾レイヤーがあります。単語のつづりが間違っているときはいつでも、richtextbox の adornerlayer に adorner を追加します。アドナーを右クリックしてそのイベントをキャプチャできるようにしたいのですが、マウスが装飾された要素の上にあるときにリッチテキストボックスのキャレット位置を失いたくありません。
IsHitTestVisible=False を設定してみました。これにより、装飾された要素の上にあるときにマウスがポインターに変化しないようにして、基になるリッチテキストボックスをクリックできるようにしますが、マウスの右ボタンのクリックキャプチャが複雑になります。
これにより、右マウスボタンのクリックをキャプチャできますが、adornedElement の下部を右クリックした場合にのみ機能するようです。adornedElement の本文をクリックしようとしても、hitTesting で見つかりません。
私はこれを正しく行っていますか、またはその上の要素がマウスイベントを受け入れることができる必要があるときに、基になるコントロールがカーソルを維持できるようにするより良い方法がありますか?
助けてくれてありがとう!
c# - Wpf AdornerLayerの子のzオーダーを変更するにはどうすればよいですか?
画像編集アプリケーションがあり、AdornerLayerに追加されるカスタム装飾があります。ユーザーがAdornerをクリックしたときに、それを一番上に移動します。つまり、別の装飾者の上にドラッグした場合、最初のクリックが一番上の装飾者にキャッチされるようにします。
AdornerLayerの子要素のzオーダーを変更する方法がわかりません。それは私がそれらを分類することを可能にしないようです。Adornerを削除して再度追加しても、最上位にはなりません。