【问题标题】:XAML - Fix controls' position in a wrappanelXAML - 修复控件在包装面板中的位置
【发布时间】:2014-07-27 06:23:00
【问题描述】:

我有一个包装面板,其中包含多个控件(如下所示),并且取决于这些控件可能显示/隐藏的场景,除了 2 个控件将始终显示并需要位于包装面板中的固定位置。


DynamicControl1     DynamicControl2     DynamicControl3     FixedControl1     FixedControl2

DynamicControl4     DynamicControl5     DynamicControl6     DynamicControl7     DynamicControl8


我想要实现的是:如果DynamicControl3和DynamicControl4折叠了,后续的动态控件需要自动取空如下:


DynamicControl1     DynamicControl2     DynamicControl5     FixedControl1     FixedControl2

DynamicControl6     DynamicControl7     DynamicControl8


但是根据 wrap 面板的默认行为,FixedControl1 和 FixedControl2 会占用我不想要的空白。

【问题讨论】:

  • 不清楚你要什么..
  • 刚刚更新了问题,希望这会让问题更清楚
  • 解决问题的一种方法是编写自己的面板。对于您的场景来说,这并不复杂。其他控件的大小是否固定?或者 DC1、DC2、D3 的组合可以比 DC1、DC2、DC5 更宽吗?我问是因为你可以对面板的孩子进行排序。如果在固定的 f.e. 之前只有一个控件,这当然不起作用
  • 所有控件可以有不同的宽度,所以如果空白空间不足以容纳后续控件,我想将空白空间留在那里。
  • @json 你的控件是同一类型的吗?您是在 xaml 中静态创建这些控件吗?

标签: wpf silverlight xaml user-interface


【解决方案1】:

隐藏可见性和折叠可见性之间存在差异。尝试将 DynamicControls 设置为 Visibility.Hidden。然后他们仍然消耗他们的空间并占据他们的位置。你的情况可以吗?

--- 编辑 ----

我相信您只能编写自己的面板。这其实很容易。只需覆盖 MeasureOverride 和 ArrangeOverride 这两个方法。您需要做的就是首先安排固定控件(用附加属性标记它们)然后将其他控件放在它们周围。从左到右一个接一个直到剩余大小(视口 - 固定控件的大小(包括边距)小于动态控件的行。然后只需移动到下一行(y偏移+上部最大控件的高度)行)。

不要太复杂。 :)

【讨论】:

  • 很遗憾没有。在这种情况下,后续控件将无法自动显示在第一行,这就是我使用 Wrap Panel 的原因。
  • 对不起,我不明白你要解释什么。是否如此动态以至于在固定的控件之前会有不同的控件?
  • 顺便说一句。你的文字很不清楚。您两次谈论 DynamicControl4,通常 WrapPanel 从左到右运行,但在您的情况下,它似乎有所不同。
  • 是的,所有控件都是动态的,除了需要在第一行末尾显示的 2 个固定控件。所以 DynamicContro1 和 DynamicContro2 也可以隐藏,如果它们被隐藏了 DynamicContro3 和 DynamicContro4 需要显示在第一行的第一个和第二个位置
  • 抱歉给您带来了困惑,刚刚更新了问题,希望这会让问题更清晰
猜你喜欢
  • 1970-01-01
  • 2019-04-18
  • 2017-10-10
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-12
相关资源
最近更新 更多