繁体   English   中英

如何根据页眉高度定位WPF扩展器?

[英]How to position WPF Expander based on Header height?

我一直在困扰着一个问题,乍一看现在可能看起来很容易了。 简而言之,问题是我想根据扩展器中标头的高度来放置扩展器。

总而言之,我有一个带有两行的网格(当前,但是可以很容易地更改)。 在第一行的底部(标题的种类),我想放置一个Expander。 但是,我希望此扩展器可以扩展到第二行。 只需将扩展器放在第一行并将垂直对齐设置到底部位置,我的扩展器就可以正确放置,但是会阻止扩展(仅扩展到同一行)。 设置Grid.RowSpan =“ 2”可使我的扩展器正确扩展,但这会使我的原始垂直对齐制动到底部。 我尝试将扩展器放到第二行,然后将扩展器的边距绑定到扩展器的ActualHeight(以及一个转换器,该转换器为我提供了一个等于高度的负顶部余量),结果变好,直到单击为止我的扩展器:-)。 出于某些原因,将绑定模式设置为“ OneTime”使我的利润为零。

有人对此有一个简单的解决方案吗? 为基于画布的扩展器创建控件模板是否有帮助(我的想法是将画布绘制在其他控件之上)? 我想我可以完成对子孙控件的数据绑定(如果支持的话)(我认为不是)。 我错过了任何明显的解决方案吗?

我可以更改扩展器的控件模板,并且无论如何都可以改变包含控件的窗口的网格布局,这不是问题。

我正在运行Visual Studio 2008,.NET 3.5。

//丹尼尔

有一种方法可以使单个扩展器的标题和内容具有不同的布局,因此它们可以位于单独的网格单元中,甚至可以位于窗口的完全分开的部分中。 对于您真正想要实现的目标来说,这可能是过高的,但是在这里是:

  1. 用标头创建一个扩展器,但正文为空。 将其放在上部单元格中。
  2. 使用所需的主体创建另一个扩展器,但是将其Template属性设置为仅包含ContentPresenter的模板,因此不会显示任何标题。 将其放在下部单元格中。
  3. 将第二个扩展器的IsExpanded属性绑定到第一个扩展器的IsExpanded属性
  4. (可选)调整制表符顺序,以使两个扩展器在一起

现在,当您扩展上部扩展器时,下部扩展器也会扩展。 如果它们之间没有缝隙,它们将看起来像是单个扩展器。

另一个有效的选择是使用单个Expander并修改其模板,以便其整个标头(包括按钮)具有VerticalAlignment =“ Bottom”且位于零尺寸的Canvas内。 在这种情况下,整个扩展器将进入您的下部单元格。 这样做的缺点是,上部单元的布局不会知道扩展器使用的空间,因此可能会根据z顺序在其上方或下方放置其他控件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM