6

エキスパンダー全体ではなく、ヘッダーの高さだけでなく、WPFExpander.Headerの高さを取得する必要があります。

Expander.Header + Expander.ContentはExpander.Heightであるため、取得するプロパティはありません。

Expander.Header Heightを取得するにはどうしますか?

4

2 に答える 2

5

エキスパンダーがテンプレート化されていない場合、それはビジュアルツリーです。

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、ではなく、を使用することにアクセントを付けたいと思います。HeightHeightdouble.IsNaNauto

于 2010-12-25T22:25:50.383 に答える
3

それを正確に行う方法はわかりませんが(おそらくリフレクションを介して?)、2つのエキスパンダーを使用してみることができます。1つはヘッダーのみ、もう1つはContentPresenterのみです。最初のエキスパンダーのIsExpandedプロパティを2番目のエキスパンダーのIsExpandedプロパティにバインドできます。これにより、それらは単一のエキスパンダーのように見えます。

しかし、あなたが何を達成しようとしているのか正確にはわかりません。

于 2010-12-25T22:13:55.553 に答える