【问题标题】:Get the Height of the WPF Expander Header获取 WPF 扩展器标题的高度
【发布时间】:2011-05-30 17:33:07
【问题描述】:

我需要获取 WPF Expander.Header 的高度,而不是整个 Expander 只是 Header 的高度。

没有属性可以获取,因为 Expander.Header + Expander.Content 就是 Expander.Height。

你会怎么做才能得到 Expander.Header Height ?

【问题讨论】:

    标签: wpf header height expander


    【解决方案1】:

    我不知道有什么方法可以做到这一点(也许通过反射?),但您可以尝试使用两个扩展器。一个只有一个标题,一个只有一个 ContentPresenter。您可以将第一个扩展器的 IsExpanded 属性绑定到第二个扩展器的 IsExpanded 属性。这会使它们看起来是一个单独的扩展器。

    不过,我不确定你想要完成什么。

    【讨论】:

      【解决方案2】:

      如果您的扩展器没有模板化,那就是可视化树:

      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;
      

      编辑

      另外,我想强调使用ActualHeight,而不是Height,因为Height 不是double.IsNaN(在XAML 中,auto)只有在代码或XAML 中明确设置时

      【讨论】:

      • 我在 msdn 论坛上找到的一样,现在看起来没问题 :) 你也找到了这个链接吗? :P => social.msdn.microsoft.com/Forums/en/wpf/thread/…
      • 不,我没有。刚刚研究了可视化树——当需要一些关于元素结构的信息时,这是我首先要做的
      猜你喜欢
      • 2017-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多