2009-12-03 69 views
4

Silverlight不配备DataTriggers,所以在这种情况下...什么可能是最好的方式,以一个项目的fontWeight设置条件设置为一个布尔值?绑定fontWeight设置为布尔在Silverlight

例如...在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> 

谢谢!

回答

10

您可以实现,其转换布尔到fontWeight设置一个的IValueConverter,并把它作为绑定的转换器:

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

... 

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

创建一个自定义的IValueConverter,绑定fontWeight设置到ISDEFAULT,并转换成真实的大胆和假到正常

+0

嗨@Rich任何示例代码,你可以提供实现相同的? – highlander141 2017-09-22 08:21:33

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> 

本示例设置前景色,但可以设置任何样式。 要绑定这个,你需要设置转换器,在这种情况下,如果IsCommentChange为True,文本将会变成红色,如果它是假的,那么它是黑色的。

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

绝对更灵活。感谢代码。 – Den 2013-04-08 14:59:43

相关问题