読者です 読者をやめる 読者になる 読者になる

たぷつきません

おなかがでてきた。もうたぷついてるやん。

WPFToolkitのAccordionのスライド領域が安定しない問題の回避方法

 高さを可変にして、ウィンドウを広げたりアコーディオン以外に開閉する別のコントロールを縦に連結して使ってそれのサイズを変更すると、Accordion内のAccordionItemのオープン中のクライアント領域の高さがきちんと追随せずに、一番下のAccordionItemの表示が崩れてしまう。
 Accordionのソースを見ると、LayoutChildrenというメソッドさえ呼べればいけるんだけど残念ながらprivate。ArrangeやMeasureやUpdateLayoutを個々のFrameworkElementにDispatcherTimer経由で発行するなど試行錯誤したがどうしても正しく動作しない。AccordionItemのスライドアニメーションとの兼ね合いで起きているのかも。
 結局回避コードとしては、OrientationをExpandDirectionを一旦変更して元に戻すという方法で行けた。

accordionMenu.ExpandDirection = ExpandDirection.Up;   // 一旦変えておきーの...
accordionMenu.ExpandDirection = ExpandDirection.Down; // ...元の設定に戻す。

 ださいけど一番ちゃんと整列してくれる。コード(http://wpf.codeplex.com/SourceControl/changeset/view/40156#1142505)を見ると分かるけど、OnExpandDirectionPropertyChangedの中で、SetPanelOrientation()と LayoutChildren()が呼び出されるのでうまく行く。他には手がない。