Привязать FontWeight к логическому значению в Silverlight - PullRequest
4 голосов
/ 04 декабря 2009

Silverlight не поддерживает DataTriggers, так что в этом случае ... какой может быть лучший способ условно установить вес шрифта элемента в логическое значение?

Например ... следующее невозможно в 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 ]

10 голосов
/ 04 декабря 2009

Вы можете реализовать IValueConverter, который преобразует bool в FontWeight, и использовать его в качестве конвертера привязки:

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

...

<TextBlock Text="{Binding Text}" FontWeight="{Binding IsDefault, Converter={StaticResource boolToFontWeight}}">
8 голосов
/ 21 июля 2012

Я бы на самом деле использовал конвертер логических стилей.

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>

В этом примере задается цвет переднего плана, но вы можете установить любой стиль. Чтобы связать это, вы должны установить конвертер, в этом случае, если IsCommentChange равен True, текст будет красным, если false, то черный.

    <TextBlock Name="tbComment" Text="{Binding Path=Comment,Mode=OneTime}"
 TextWrapping="Wrap"  
    Style="{Binding Path=IsCommentChanged, 
    Converter={StaticResource boolToHistoryTextBlockStyleConverter}}" />
1 голос
/ 04 декабря 2009

Создайте пользовательский IValueConverter, свяжите FontWeight с IsDefault и преобразуйте true в Bold и false в Normal

...