問題タブ [arrangeoverride]
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 - Panel.Children と Panel.InternalChildren - 違いは何ですか?
MSDN - Panel.InternalChildren プロパティによると:
Panelから派生したクラスは、 MeasureCore やArrangeCore などの内部オーバーライドにChildrenプロパティ ではなく、このプロパティを使用する必要があります。
したがって、これは実際には 2 つの部分からなる質問です。
FooPanel
から派生した独自の Panel を作成すると、またはPanel
をオーバーライドできないようです。なぜその声明がそこにあるのかさえわかりません。ただし、andをオーバーライドすることはできます。したがって、これら 2 つのメソッドにプロパティを使用する必要があるのでしょうか。MeasureCore
ArrangeCore
MeasureOverride
ArrangeOverride
InternalChildren
Children
プロパティとプロパティの本当の違いは何InternalChildren
ですか?
layout - ArrangeOverride と Arrange() はいつレイアウト システムによって呼び出されますか?
Silverlightのレイアウト システムを理解しようとしていますが、そのプロセスがどのように機能するのかよくわかりません。Measure は常に前に呼び出され、すべての測定が完了すると開始されることを知っていarrange
ます。しかし、このプロセスは正確にいつ開始され、それを制御できるのでしょうか?
MSDN ライブラリへのリンクは書かないでください。私は既に読みましたが、まったくわかりません。
私の特定の状況は、ネストされた( andLinearLayouts
からクラスを継承して動作する) がいくつかありますが、サイズが必要であり(それらのサイズは親のパーセンテージであるため)、すべての要素がツリーにロードされるまで取得できません。ので、LayoutRoot_Loaded を呼び出します。はい、動作しますが、レイアウトプロセスを3回行うため、システム全体にとって効率的ではありません.レイアウトシステムをプログラマーが完全に管理する方法を誰かが助けたり、少なくとも説明したりできますか? :-)Panel
Arrangeoverride
MEasureoverride
rootcontainer
arrange()
wpf - wpfカスタムパネル
私は、すべての子を取得してViewBox内にラップし、特定の均一なサイズに縮小できるようにするパネルを作成することを検討しています。
これが可能かどうかはわかりませんが、お願いしたいと思いました。これが可能かどうかわからない理由は、Panelにxamlが関連付けられていないためです。彼らは子供たちをコードで測定して配置します。任意のヒント?
十分に明確ではなかった後、私はより具体的になると思います:
子供たちをアレンジして測定したいので、パネルが欲しいです。
- メジャーは、すべての子要素の平均の高さ/幅を見つけます。
- アレンジはそれらをグリッドのようなパターンに配置し、平均的な高さ/幅にスケーリングします。私はそれらをクリップバウンドにしたくありません、私はそれらを適切にスケールアップまたはスケールダウンしたいです。
私はすでに平均の高さ/幅を見つけるために測定オーバーライド機能を動作させていますが、アレンジオーバーライドでそれらをスケーリングする方法を理解できません。
wpf - WPF:カスタムパネル内から子アイテムをどのように「描画解除」しますか?
基本的に、DependencyProperty(FooProperty)に基づいて子を描画するパネルがあります。
FooPropertyがtrueの場合、子が配置されます。それ以外の場合は、配置されません。最初のパススルーは問題ありませんが、子がFooPropertyをtrue(描画)からfalse(描画しない)に変更すると、ArrangeOverride
メソッドはそれをスキップし、子は描画されたままになります。
描画されるべきではない子をスキップする代わりに、描画を解除する方法が必要だと思いますか?
wpf - 幅が変更されたときに ListBoxItem が MeasureOverride を呼び出さないのはなぜですか?
分かりやすく説明するために、以下では、と の両方をオーバーライドしてListBoxItem
、 のサブクラスと のサブクラスを作成ListBox
し、コンテナとしてそれを使用しています。IsItemItsOwnContainerOverride
GetContainerForItemOverride
ウィンドウが最初に表示されると、予想どおり、MeasureOverride
( ListBoxItem
Infinity,Infinity を使用して)ArrangeOverride
すべてのアイテムで呼び出され、その後すべてのアイテムで呼び出されます。
ただし、 のサイズを変更する場合、 width プロパティのメタデータが に設定されていても、ListBox
のみArrangeOverride
が呼び出されます。ListBoxItem
MeasureOverride
AffectsMeasure
注:
ScrollViewer.HorizontalScrollbarVisibility
「無効」に設定することでこれを回避できることはわかってMeasureOverride
います。この場合、スクロール設定によりアイテムがリストボックスの幅に一致するように強制され、自然に再起動されるため、期待どおりに呼び出されます。Width
ただし、プロパティのメタデータにAffectsMeasure
フラグが設定されており、ステップによって幅が変化しているため、デフォルトで Measure が呼び出されない理由をまだ理解しようとしていますArrangeOverride
。
そのフラグはコンテナの単なるヒントであり、コントロールが配置されている場合はScrollViewer
無視されますか? 私の推測では、スクロールを無効にしない限り、コントロールは無限の領域を使用できるため、一度測定すると、再度測定する必要はありません。ただし、水平スクロールを無効にすると、幅が無制限ではないため、MeasureOverride
が再度呼び出されます。しかし、それは論理的なものではありますが、単なる推測です。
ここで遊ぶためのサンプルコードです。新しい WPF プロジェクトを作成し、これをウィンドウの CodeBehind に貼り付けて、デバッグ出力を確認します。次に、HorizontalScrollbarVisibility フラグを設定すると、それが呼び出されることがわかります。
wpf - ContentControl 子パネルの配置/測定
そのため、親 ContentControl に実装されているズーム、パン、子のドラッグとしてロジックを管理し、パネルのタイプを簡単に変更できます。
アレンジ・メジャーオーバーライドの問題、ドラッグ時のマウスの位置合わせが地獄になってしまいました。すべての位置がオフセットされているようです:
e.GetPosition(this.Content as Panel).X
Dragged Children を左側に大きなオフセットで移動させます。
と
Translate(Point,UIElement)
呼び出しのどの組み合わせでも効果がないようです:
this.Content.Translate(Point,Children);
また
Child.Content.Translate(Point,this.Content);
どちらも試していません:
Offset(x,y)
TranslateTransform または HitTest の前後。
同様のシナリオの良い例: http://www.codeproject.com/KB/WPF/zoomandpancontrol.aspx
HitTesting/DragMove でドラッグ オフセットを修正するにはどうすればよいですか? UnTranslable オフセットなしで TranslateTransform を機能させるために、Arrange/Measure Override で正確に何を修正できますか? ありがとう
wpf - FramworkElement 子 FramworkElement を配置しない配置
[この質問に該当する] 2 つのクラスがあります。最初の ,XYAxes2
は を拡張しFrameworkElement
ます。オーバーライドMeasureOverride
し、その唯一の子( extends も含む) を目的の位置に配置ArrangeOverride
しようとします。XAxis
FrameworkElement
XYAxes2
(親):
Scale
カスタム描画コンポーネントです。
Scale
(子):
デバッグ時ActualWidth
、この関数では、 で設定された幅ではなく、常に親の幅がArrangeOverride
100 になります。ただし、子は で指定された領域にクリップされArrangeOverride
ます。
これらの関数のいずれかで何か間違ったことをしていますか?
編集:に挿入することによりXAxis.Measure(100,200)
、ArrangeOverride
問題は明らかに修正されます。確かにMeasure
、取り決めが無効になるたびに呼び出す必要はないはずです (これはInvalidateArrange
、暗黙的に を呼び出す必要があることを意味しますInvalidateMeasure
)。この背後にある原因を明らかにできる人はいますか?
誰かが実際に設定されている場所DesiredSize
を知っていますかActualWidth/Height
(明らかに、私のコードでは設定されていません)?
wpf - WPF-IScrollInfoの実装
問題:いくつかのアイテム(たとえば長方形)を持つItemsControlを持つウィンドウ。ウィンドウのMinWidthとMinHeightが設定されています(例:300)。長方形のサイズを変更するときに、長方形に2列で表示するのに十分なスペースがない場合に必要です。また、2列の場合でも、スクロールビューアを表示するのに十分なスペースがありません。
私が試したこと:1。拡張ItemsControlを作成します。
私のItemsControlには、ItemsPanelTemplateとして拡張グリッドがあります。
パブリッククラスMyGrid:Grid、IScrollInfo{....IScrollInfo実装}
私はこのグリッドを使用して、ItemsControlがPrepareContainerForItemOverride()を実行するときに、これを使用してアイテムを2つの列に分割できると考えています。
アイデアは会議から「取得」されます....しかし、次に何をすべきかわかりません...次のような質問があります:データグリッドの測定と配置をオーバーライドするとき、データグリッドでアイテムの位置を設定しますが、それからそれはPrepareContainerForItemOverride()と呼ばれます...それでは何ですか?作成する行数を計算する必要がありますか?しかし、その後、ウィンドウのサイズを再度変更すると、PrepareContainerForItemOverride()は呼び出されません...
この問題は私を超えています...あなたの誰かがそれを持っているなら私に手がかりを教えてください。君たちありがとう!
c# - MeasureOverride と ArrangeOverride は呼び出されません
私は WPFExtensions の ZoomControl を使用しています。ソースコードはこちら.
OnRender メソッドでアドナーを追加しました。
ZoomControl xaml を使用:
アドナーの適用:
イメージ コントロールをドラッグすると、装飾が動きません。
ArrangeOverride と MeasureOverride をオーバーライドしてみました:
しかし、効果はありません。出力ウィンドウには何も表示されず、装飾は動きません。
ズームしているときは、すべて問題ありません。Adorner は、イメージ コントロールの変更に応じてその位置を変更します。
問題は私のコードにありますか、それとも ZoomControl にありますか?
サンプルアプリはこちら.
解決:
キャンバスを AdornerDecorator に配置する必要がありました。
説明はこちらです。
wpf - RenderTransform が無効な配置を引き起こす
すべてのドキュメントは、RenderTransform の設定がアレンジに影響を与えないことを示唆しているようです。しかし、それはまさに私が見ている動作ではありません。
コントロール レイアウトに関する奇妙な要件があります。可能な限り wpf のレイアウト システムを残したかったので、Decorator を継承する要素を作成しました。関心のある要素をマークする添付プロパティがあります。配置中に、ベースの ArrangeOverride メソッドを呼び出します。通常のプロセスを使用して要素を取り出します。次に、アタッチされた属性を使用してコントロールをクロールし、render 変換を使用して、必要な場所にコントロールを再配置します。
項目コントロールを使用するまで、これはすべて正常に機能します。RenderTransform を割り当てるとアレンジが無効になり、アレンジ メソッドが繰り返し呼び出されます。ドキュメントは、RenderTransform の設定がアレンジに影響を与えないことを示唆しているようです。