根据布局位置自动调整元素大小

时间:2011-04-29 15:43:30

标签: .net wpf design-patterns layout user-interface

基本上我想布置可以根据放置位置改变内容的视觉元素。我想在WPF中做到这一点,但你可能会在不了解WPF的情况下建议一般算法。

示例:请考虑仅包含WrapPanelLabel的{​​{1}}。 Label在新行的开头放置WrapPanel时,将从其文本中删除所有前导空格。这确实会使Label缩短。

唯一能够确定Label所在位置的人是WrappPanel进行布局。因此,执行此操作的一种方法是编写自定义Panel代码,该代码覆盖MeasureOverrideArrangeOverride并在Label内更改MeasureOverride,然后再调用Measure Label。我不喜欢这个,因为:

  1. 这是丑陋的黑客(Panel,特别是MeasureOverrideArrangeOveride应该只定位孩子不要改变它们。)
  2. 我不确定,但我认为如果我更改了Label MeasureOverride Label MeasureOverride会导致布局更新,以便进行另一次(递归)调用到WrapPanel(=>无限循环)。
  3. 所以请为此方案建议正确的设计。它应该怎么做?我想到的是:

    1. 定期Width
    2. 每次更改HeightMeasureOverride或更改某些子项(其子项可能会重新定位)时,请在ArrangeOverrideMeasure之前更新子项 被称为。
    3. 在更新儿童(2.)的过程中,无法拨打Arrange的{​​{1}}或WrapPanel问题:我如何暂时禁止所有此类电话?
    4. 在您建议我使用RichTextBoxTextBlock处理行开头处的空格之前请注意Label s和空格只是一个示例 - 它只是一个例子复杂。但如果我知道如何正确地解决'Label和白空间',我也会知道如何解决实际问题。

      如果您想知道我为什么要这样做,请查看我的问题Create guitar chords editor in WPFH.B.'s answer

0 个答案:

没有答案