2

假设我有一些这样的 XAML:

<StackPanel>
    <TextBlock Text="Blah Blah Blah" />
</StackPanel>

在这种情况下,正如我所料,宽度是 NaN,因为它随着 StackPanel 的大小而增长,并且没有明确设置。

不幸的是,ActualWidth 并没有给我我期望的结果。ActualWidth 不受 StackPanel 大小的限制。它与渲染文本的长度绑定,即使该文本超出了父 StackPanel 的大小。

例如,如果 StackPanel.ActualWidth 是 400,而我的文本大于 400,我的 TextBlock.ActualWidth 可能是 556(或其他)。相同情况下的按钮不会以这种方式运行。

这对我来说是个问题,因为我正在尝试实现实现 TrimmingText 的附加行为(如果文本被裁剪,则在末尾省略)。如果显式设置了 Width 属性,它会很好用,但在更动态的情况下,我无法让它工作。

有什么想法吗?

布赖恩

4

1 回答 1

1

我不相信这是一个看起来如此简单的问题(或者至少对我来说是这样)。在 WPF 中,我通常建议使用DockPanel控件而不是StackPanel. 对于 Silverlight,由于不存在DockPanel控件,问题变得更加严重。我的一个建议(可能有效也可能无效)是在父级更改大小时将的Width属性更新为父级的属性。不是最优雅的解决方案,但不幸的是它可能是必需的。TextBlockActualWidthStackPanel

于 2009-06-04T15:19:34.377 回答