让我们面对现实吧。微软已经确认 Silverlight 是致命的。如果可能的话,您应该跳到 WPF。不过,让我试着回答你的问题。 wpf 中有一些很酷的东西,它被称为属性值继承。让我告诉你怎么做:
public class MyWpfExtension
{
public static bool GetCharacterEllipsis(DependencyObject obj)
{
return (bool)obj.GetValue(CharacterEllipsisProperty);
}
public static void SetCharacterEllipsis(DependencyObject obj, bool value)
{
obj.SetValue(CharacterEllipsisProperty, value);
}
// Using a DependencyProperty as the backing store for CharacterEllipsis. This enables animation, styling, binding, etc...
public static readonly DependencyProperty CharacterEllipsisProperty =
DependencyProperty.RegisterAttached("CharacterEllipsis", typeof(bool), typeof(MyWpfExtension),
new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.Inherits, OnCharacterEllipsisChanged));
private static void OnCharacterEllipsisChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (d is TextBlock && (bool)e.NewValue)
{
TextBlock tb = (TextBlock)d;
tb.TextTrimming = TextTrimming.CharacterEllipsis;
}
}
}
顺便说一句,这就是你所看到的 WPF。我不知道这对你有多大帮助,但你去吧。我假设 Silverlight 也有这个属性值继承。
现在开始使用:
<StackPanel Background="Blue" local:MyWpfExtension.CharacterEllipsis ="True">
<TextBlock>asdfsadfsadfsadfasdfsadfsadfsadfasdfsadfsadfsadf</TextBlock>
<TextBlock>asdfsadfsadfsadfasdfsadfsadfsadfasdfsadfsadfsadf</TextBlock>
<TextBlock>asdfsadfsadfsadfasdfsadfsadfsadfasdfsadfsadfsadf</TextBlock>
<TextBlock>asdfsadfsadfsadfasdfsadfsadfsadfasdfsadfsadfsadf</TextBlock>
<TextBlock>asdfsadfsadfsadfasdfsadfsadfsadfasdfsadfsadfsadf</TextBlock>
<TextBlock>asdfsadfsadfsadfasdfsadfsadfsadfasdfsadfsadfsadf</TextBlock>
<TextBlock>asdfsadfsadfsadfasdfsadfsadfsadf</TextBlock>
<TextBlock>asdfsadfsadfsadfasdfsadfsadfsadf</TextBlock>
</StackPanel>
或者像这样:
<StackPanel Background="Blue" >
<ContentPresenter local:MyWpfExtension.CharacterEllipsis="True" Content="fasdfasdfsdffasdfasdfsdffasdfasdfsdffasdfasdfsdf"></ContentPresenter>
</StackPanel>
基本上你可以设置你的附加属性 answere 并且该属性将被继承到所有元素。如果元素是 TextBlock,则会设置 CharacterElipsis。