gpt4 book ai didi

c# - 如何根据标题高度定位 WPF Expander?

转载 作者:太空宇宙 更新时间:2023-11-03 14:32:36 24 4
gpt4 key购买 nike

我一直在努力解决一个乍一看可能很容易的问题,现在已经有一段时间了。简而言之,问题是我想根据扩展器中 header 的高度定位扩展器。

长话短说,我有一个包含两行(目前,但可以轻松更改)的网格。在第一行的底部(一种标题)我想放一个扩展器。但是,我希望这个扩展器扩展到第二行。只需将扩展器放在第一行并将垂直对齐设置为底部即可正确定位我的扩展器,但会阻止扩展(仅扩展到同一行)。设置 Grid.RowSpan="2"可以使我的扩展器正确扩展,但这会阻止我原来的垂直对齐到底部。我试过将扩展器放在第二行,然后将扩展器的边距绑定(bind)到扩展器的 ActualHeight(连同一个转换器,它给我一个等于高度的负上边距)结果很好,直到我点击我的扩展器 :-)。出于某种原因,将绑定(bind)模式设置为“一次性”让我的 margin 为零。

有人对此有简单的解决方案吗?基于 Canvas 为我的扩展器创建控件模板是否有帮助(我的想法是 Canvas 将绘制在其他控件之上)?我想如果支持的话,我可以对后代控件进行数据绑定(bind)(我认为不支持)。我是否遗漏了任何明显的解决方案?

我有可能更改扩展器的控件模板,并且更改包含该控件的窗口的网格布局不是问题,如果这对我有帮助的话。

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

//丹尼尔

最佳答案

有一种方法可以使单个扩展器的标题和内容看起来具有单独的布局,因此它们可以位于单独的网格单元格中,甚至可以位于窗口的完全独立的部分中。这对于您真正想要完成的事情来说可能有点矫枉过正,但它是:

  1. 创建一个带有标题但主体为空的扩展器。将它放在上面的单元格中。
  2. 使用您想要的正文创建另一个扩展器,但将其 Template 属性设置为仅包含 ContentPresenter 的模板,这样就不会显示标题。将它放在下面的单元格中。
  3. 将第二个扩展器的 IsExpanded 属性绑定(bind)到第一个扩展器的 IsExpanded 属性
  4. 可选择调整 Tab 键顺序,使两个扩展器放在一起

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

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

关于c# - 如何根据标题高度定位 WPF Expander?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2245167/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com