基本上我想布置可以根据放置位置改变内容的视觉元素。我想在WPF中做到这一点,但你可能会在不了解WPF的情况下建议一般算法。
示例:请考虑仅包含WrapPanel
个Label
的{{1}}。 Label
在新行的开头放置WrapPanel
时,将从其文本中删除所有前导空格。这确实会使Label
缩短。
唯一能够确定Label
所在位置的人是WrappPanel
进行布局。因此,执行此操作的一种方法是编写自定义Panel
代码,该代码覆盖MeasureOverride
和ArrangeOverride
并在Label
内更改MeasureOverride
,然后再调用Measure
Label
。我不喜欢这个,因为:
Panel
,特别是MeasureOverride
和ArrangeOveride
应该只定位孩子不要改变它们。)Label
MeasureOverride
Label
MeasureOverride
会导致布局更新,以便进行另一次(递归)调用到WrapPanel
(=>无限循环)。所以请为此方案建议正确的设计。它应该怎么做?我想到的是:
Width
。Height
或MeasureOverride
或更改某些子项(其子项可能会重新定位)时,请在ArrangeOverride
和Measure
之前更新子项 被称为。Arrange
的{{1}}或WrapPanel
。 问题:我如何暂时禁止所有此类电话? 在您建议我使用RichTextBox
或TextBlock
处理行开头处的空格之前请注意Label
s和空格只是一个示例 - 它只是一个例子复杂。但如果我知道如何正确地解决'Label
和白空间',我也会知道如何解决实际问题。
如果您想知道我为什么要这样做,请查看我的问题Create guitar chords editor in WPF和H.B.'s answer。