我目前的解决方案是使用两个TextBlocks并控制两者的可见性,以在原始和替代风格之间切换.但是这个解决方案不可行,因为我需要复制每个TextBlock,以显示alternativ版本.
当前解决方案
<TextBlock Visibility="{Binding MyText,Converter={StaticResource nullToVisibilityConverter}}" FontSize="20" Foreground="Black" Text="{Binding MyText}" /><TextBlock Visibility="{Binding MyText,Converter={StaticResource nullToVisibilityConverter}}" FontSize="20" FontStyle="Italic" Foreground="Gray" Text="None" />
需要的解决方案:
<TextBlock FontSize="20" Foreground="Black" Text="{Binding MyText,TargetNullValue='None'}" /><!-- plus any styles,templates or triggers,to change style of TextBlock for TargetNullValue -->
如何为TargetNullValue使用alternativ样式.欢迎使用样式,触发器或模板的任何解决方案.
解决方法 注意:这适用于WPF,您可能必须转换与SL5.0不完全相关的任何内容.最简单的解决方案(除非这个要求无处不在)是为每个实例创建一个特定的样式,它绑定到与textblock相同的属性,检查Null并在那里设置属性.
这个例子很好地粘贴到Kaxaml中.
<Style x:Key="tacoStyle" targettype="TextBlock"> <Style.Triggers> <DataTrigger Binding="{Binding Source={StaticResource taco}}" Value="{x:Null}"> <Setter Property="Foreground" Value="Red"/> </DataTrigger> </Style.Triggers> </Style></StackPanel.Resources><TextBlock Style="{StaticResource tacoStyle}" Text="{Binding Source={StaticResource taco},TargetNullValue='bacon'}"/>
当然,如果您需要更通用的解决方案,可以扩展TextBlock并添加一些逻辑来处理这个问题.
<StackPanel> <StackPanel.Resources> <x:NullExtension x:Key="taco"/> <Style x:Key="AltTacoStyle" targettype="yourNS:ExtendedTextBlock"> <Setter Property="Foreground" Value="Pink"/> </Style> </StackPanel.Resources> <yourNS:ExtendedTextBlock Text="{Binding Source={StaticResource taco},TargetNullValue='bacon'}" AltStyle="{StaticResource AltTacoStyle}" AllowAltStyleOnNull="True"/> </StackPanel>
控制:
public class ExtendedTextBlock : TextBlock { public static Readonly DependencyProperty AllowAltStyleOnNullProperty = DependencyProperty.Register("AllowAltStyleOnNull",typeof (bool),typeof (ExtendedTextBlock),new PropertyMetadata(default(bool))); public bool AllowAltStyleOnNull { get { return (bool) GetValue(AllowAltStyleOnNullProperty); } set { SetValue(AllowAltStyleOnNullProperty,value); } } public static Readonly DependencyProperty AltStyleProperty = DependencyProperty.Register("AltStyle",typeof (Style),new PropertyMetadata(default(Style))); public Style AltStyle { get { return (Style) GetValue(AltStyleProperty); } set { SetValue(AltStyleProperty,value); } } static ExtendedTextBlock() { TextProperty.OverrIDeMetadata(typeof(ExtendedTextBlock),new FrameworkPropertyMetadata(default(string),PropertyChangedCallback)); } private static voID PropertyChangedCallback(DependencyObject dependencyObject,DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs) { var tb = (ExtendedTextBlock)dependencyObject; var binding = tb.GetBindingExpression(TextProperty); if (binding != null && binding.DataItem == null) { if (tb.AllowAltStyleOnNull) tb.Style = tb.AltStyle; } }}
你需要充实一点才能做好生产准备,但你明白了.
总结以上是内存溢出为你收集整理的silverlight – 为TargetNullValue更改TextBlock的样式全部内容,希望文章能够帮你解决silverlight – 为TargetNullValue更改TextBlock的样式所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)