2009-06-04 33 views
2

可以说我有一些XAML这样的:问题与TextBlock.ActualWidth在Silverlight 2.0

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

在这种情况下,宽度为NaN,如我所料,因为它的增长与StackPanel中的大小和没有明确设置。

不幸的是,ActualWidth并没有给我我期望的结果。 ActualWidth不受StackPanel大小的限制。它被绑定到渲染文本的长度,即使该文本超过父级StackPanel的大小。例如,如果StackPanel.ActualWidth是400,并且我的文本大于400,那么TextBlock.ActualWidth可能是556(或其他)。在相同情况下的按钮不会这样。

这对我来说是个问题,因为我试图实现一个实现TrimmingText的附加行为(如果文本被裁剪,最后使用elipsis)。如果Width属性被明确设置,它会很好用,但是在更动态的情况下,我无法让它工作。

有什么想法?

布赖恩

回答

1

我不相信这是因为它可能会出现(或至少对我做了)这样一个简单的问题。在WPF中,我通常会推荐使用DockPanel控件而不是StackPanel。对于Silverlight,由于不存在DockPanel控件这一事实,问题更加恶化。我的一个建议(可以或不可以)将更新TextBlockWidth属性为父母StackPanelActualWidth属性,只要父母更改大小。不是最优雅的解决方案,但它可能不幸是必需的。

+0

是的,这是关于我能做的最好的。我的行为要求设置宽度属性。如果该行为的用户将TextBlock放入更改该宽度的容器中,则当容器大小更改为容器的ActualWidth时,他们将不得不修改Width属性。有点不高兴,但它有效。 – 2009-06-04 19:18:54