silverlight – 为TargetNullValue更改TextBlock的样式

silverlight – 为TargetNullValue更改TextBlock的样式,第1张

概述如果bound属性的值为null,我想更改TextBlock的样式.我已经为要显示的TextBlock的TargetNullValue指定了一个值,但是我希望以一种替代风格显示它.我该怎么做. 我目前的解决方案是使用两个TextBlocks并控制两者的可见性,以在原始和替代风格之间切换.但是这个解决方案不可行,因为我需要复制每个TextBlock,以显示alternativ版本. 当前解决方案 < 如果bound属性的值为null,我想更改TextBlock的样式.我已经为要显示的TextBlock的TargetNullValue指定了一个值,但是我希望以一种替代风格显示它.我该怎么做.

我目前的解决方案是使用两个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的样式所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1007424.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存