親からのレイアウト変更を通知する必要があるカスタム コントロールがあります。したがって、親が子を再レイアウトする場合、新しい視覚的位置を計算したいと思います。残念ながらArrangeOverride
、子コントロール内では位置が実際には変化しないため、子コントロールは呼び出されません。これは理にかなっています。レイアウト パスで、カスタム コントロールが適切に配置されますが、ArrangeOverride
呼び出されません。私が達成しようとしていることをより明確に示すために、背景をぼかすコントロールがありますエアログラスのような効果を与えます。それを実現するために、私のコントロールは背景コントロールを視覚的なブラシにレンダリングし、そのブラシのビューボックスを計算して背景を輝かせます。次に、ぼかし効果によってぼかします。レイアウトが変わらない限り、問題なく動作します。もしそうなら、私はブラシを更新する必要があります。そして、これを ArrangeOverride メソッド内で行いました。
だから私は、無効化または親の無効化のさまざまな組み合わせArrangeOverride
を使用しようとしました。MeasureOverride
最初は から継承しましContentControl
たが、それを に変更しましたDecorator
。これは、Decorator が役に立たない特別な動作をしている可能性があると考えたからです。LayoutChanged
非常に悪質なイベントなので、できるだけ避けたいと思います。いくつかのコードを提供しますが、それについて特別なことは何もありません。私のコードに実際には縛られていない、かなり基本的な問題だと思います。ちなみに、レイアウターは(キャンバスだけでなく)何でもかまいません。では、親が私のコントロールに「あなたが何も変更していないことは知っていますが、私はあなたを再配置しました」と伝えていることを通知する必要があるイベント、メソッド、または方法は何ですか。