4

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>

ありがとう!

4

3 に答える 3

10

bool を FontWeight に変換する IValueConverter を実装し、それをバインディングのコンバーターとして使用できます。

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

...

<TextBlock Text="{Binding Text}" FontWeight="{Binding IsDefault, Converter={StaticResource boolToFontWeight}}">
于 2009-12-03T23:07:18.900 に答える
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の場合、テキストは赤になり、falseの場合、黒になります。

    <TextBlock Name="tbComment" Text="{Binding Path=Comment,Mode=OneTime}"
 TextWrapping="Wrap"  
    Style="{Binding Path=IsCommentChanged, 
    Converter={StaticResource boolToHistoryTextBlockStyleConverter}}" />
于 2012-07-20T21:35:36.850 に答える
1

カスタム IValueConverter を作成し、FontWeight を IsDefault にバインドし、true を Bold に、false を Normal に変換します。

于 2009-12-03T23:08:05.983 に答える