エキスパンダー全体ではなく、ヘッダーの高さだけでなく、WPFExpander.Headerの高さを取得する必要があります。
Expander.Header + Expander.ContentはExpander.Heightであるため、取得するプロパティはありません。
Expander.Header Heightを取得するにはどうしますか?
エキスパンダーがテンプレート化されていない場合、それはビジュアルツリーです。
Expander { Border { DockPanel { ToggleButton, ContentPresenter {...} } } }
必要なのは、そのToggleButtonを取得することだけです。使い方は簡単VisualTreeHelper
です:
var border = VisualTreeHelper.GetChild(expander, 0);
var dockpanel = VisualTreeHelper.GetChild(border, 0);
var togglebutton = VisualTreeHelper.GetChild(dockpanel, /*0*/); // it may be not 0th, so please enumerate all children using VisualTreeHelper.GetChildrenCount(dockpanel) and find that ToggleButton
return togglebutton.ActualHeight;
編集
また、コードまたはXAMLで明示的に設定されている場合にのみ、(XAMLでは)ではないためActualHeight
、ではなく、を使用することにアクセントを付けたいと思います。Height
Height
double.IsNaN
auto
それを正確に行う方法はわかりませんが(おそらくリフレクションを介して?)、2つのエキスパンダーを使用してみることができます。1つはヘッダーのみ、もう1つはContentPresenterのみです。最初のエキスパンダーのIsExpandedプロパティを2番目のエキスパンダーのIsExpandedプロパティにバインドできます。これにより、それらは単一のエキスパンダーのように見えます。
しかし、あなたが何を達成しようとしているのか正確にはわかりません。