将FontWeight绑定到Silverlight中的布尔值

时间:2009-12-03 23:00:21

标签: silverlight data-binding xaml triggers datatrigger

Silverlight没有DataTriggers功能,所以在这种情况下......有条件地将项目的fontweight设置为布尔值的最佳方法是什么?

例如...... Silverlight中无法实现以下功能。

<TextBlock Text="{Binding Text}">
    <TextBlock.Triggers>
        <DataTrigger Binding="{Binding IsDefault}" Value="True">
            <Setter Property="FontWeight" Value="Bold"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding IsDefault}" Value="False">
            <Setter Property="FontWeight" Value="Normal"/>
        </DataTrigger>
    </TextBlock.Triggers>
</TextBlock>

谢谢!

3 个答案:

答案 0 :(得分:10)

您可以实现一个将bool转换为FontWeight的IValueConverter,并将其用作绑定的转换器:

<UserControl.Resources>
    <local:BoolToFontWeightConverter x:Key="boolToFontWeight"/>
</UserControl.Resources>

...

<TextBlock Text="{Binding Text}" FontWeight="{Binding IsDefault, Converter={StaticResource boolToFontWeight}}">

答案 1 :(得分:8)

我实际上会使用布尔到样式转换器。

public class BoolToStyleConverter : IValueConverter
{
    public Style TrueStyle { get; set; }
    public Style FalseStyle { get; set; }

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return ((bool)value) ? TrueStyle : FalseStyle;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

然后在资源部分中设置2个公共样式属性。

<localHelpers:BoolToStyleConverter x:Key="boolToHistoryTextBlockStyleConverter">
    <localHelpers:BoolToStyleConverter.TrueStyle>
        <Style TargetType="TextBlock">
            <Setter Property="Foreground" Value="Red"></Setter>
        </Style>
    </localHelpers:BoolToStyleConverter.TrueStyle>
    <localHelpers:BoolToStyleConverter.FalseStyle>
        <Style TargetType="TextBlock">
            <Setter Property="Foreground" Value="Black"></Setter>
        </Style>
    </localHelpers:BoolToStyleConverter.FalseStyle>
</localHelpers:BoolToStyleConverter>

此示例设置Foreground颜色,但您可以设置任何样式。 要绑定它,你可以设置转换器,在这种情况下,如果IsCommentChange为True,文本将为红色,如果为false,则为黑色。

    <TextBlock Name="tbComment" Text="{Binding Path=Comment,Mode=OneTime}"
 TextWrapping="Wrap"  
    Style="{Binding Path=IsCommentChanged, 
    Converter={StaticResource boolToHistoryTextBlockStyleConverter}}" />

答案 2 :(得分:1)

创建自定义IValueConverter,将FontWeight绑定到IsDefault,并将true转换为Bold,将false转换为Normal