仅当某些条件为真时才通过Binding使TextBlock Bold

时间:2014-01-03 12:30:35

标签: wpf binding

如何通过TextBlockFontStyleBinding定义为bool为粗体?

<TextBlock 
   Text="{Binding Name}"
   FontStyle="???">

我真的很想把它绑定到

public bool NewEpisodesAvailable
{
    get { return _newEpisodesAvailable; }
    set
    {
        _newEpisodesAvailable = value;
        OnPropertyChanged();
    }
}

有没有办法实现这一点,或者我的Model属性应该为我做翻译,而不是直接提出bool FontStyle

4 个答案:

答案 0 :(得分:25)

您可以通过DataTrigger这样实现:

    <TextBlock>
        <TextBlock.Style>
            <Style TargetType="TextBlock">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding NewEpisodesAvailable}"
                                 Value="True">
                        <Setter Property="FontWeight" Value="Bold"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBlock.Style>
    </TextBlock>

或者您可以使用IValueConverter将bool转换为FontWeight。

public class BoolToFontWeightConverter : DependencyObject, IValueConverter
{
    public object Convert(object value, Type targetType,
                          object parameter, CultureInfo culture)
    {
        return ((bool)value) ? FontWeights.Bold : FontWeights.Normal;
    }

    public object ConvertBack(object value, Type targetType,
                              object parameter, CultureInfo culture)
    {
        return Binding.DoNothing;
    }
}

XAML:

<TextBlock FontWeight="{Binding IsEnable,
                        Converter={StaticResource BoolToFontWeightConverter}}"/>

确保在XAML中将转换器声明为资源。

答案 1 :(得分:2)

只需实现一个将bool转换为所需字体样式的转换器。然后绑定到NewEpisodesAvailable并让转换器返回正确的值。

答案 2 :(得分:1)

我会创建一个在其getter中返回字体样式的属性。如果上面的属性为false,则可以使其返回null。然后将字体样式xaml绑定到该属性

答案 3 :(得分:1)

在这种情况下使用触发器。

<TextBlock.Style>
    <Style TargetType="TextBlock">
        <Style.Triggers>
            <DataTrigger Binding="{Binding NewEpisodesAvailable}" Value="True">
                <Setter Property="FontWeight" Value="Bold"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</TextBlock.Style>

关于CodeProject的文章: http://www.codeproject.com/Tips/522041/Triggers-in-WPF