カスタムコントロールが実装されています。
UIElementにInvalidateMeasureを呼び出すと、そのMeasureOverrideはトリガされません。
また、この状態で、幅または高さが変更された場合、MeasureOverrideはトリガされません。
ほとんどの場合、MeasureOverrideがトリガーされます。しかし、トリガーされていない特定のシナリオがあります。InvalidateMeasureを呼び出しても、MeasureOverrideメソッドがトリガされません。
簡単なデモで同じ問題を複製することはできません。カスタムコントロールも共有できません。
現在の回避策は、UIElementのネストされた親要素の1つを無効にすることです(1回のみ)。その後、メジャーオーバーライドがトリガされます。しかし、後でアプリケーションを使用するときに同じ問題が再度発生します。
これはWPFフレームワークのバグですか?
InvalidateMeasureが呼び出されたときに、MesureOverrideを呼び出すWPFフレームワークを停止するシナリオはありますか?
いくつかの観察:私は、「ノード」、それが動作していないが無効ならば、先に記載されているとおり、次の視覚的な構造
で
。
回避方法:CustomScrollViewerを無効にすると(一度だけ)、正常に動作しています。
ヒント:注釈を削除しても、この問題はこれまでに見られません。
ビジュアル構造は次のようになります。
Control (a custom control)
-Grid
--CustomScrollViewer (a custom control)
---Border
----Grid
-----ContentPresenter
------Canvas
-------DiagramPage (a custom panel contains about 200 elements)
--------Node (a custom control)
---------Grid
----------AnnotationPanel (a custom panel contains about 2-3 elements)
-----------Annotation
"これはWPFフレームワークのバグですか?"確かにそうではありません。それだけでなく、[完全で検証可能な例](http://stackoverflow.com/help/mcve)がなければ、あなたの質問に答えることは不可能です。 'InvalidateMeasure'の代わりに' UpdateLayout'を試しましたか? – Clemens
@Clemens私はUpdateLayoutを試しましたが、Measure/Arrangeオーバーライドメソッドを呼び出していません。 – Jegan