15

私はSilverlightの標準的なコントロールのスタイル設定に問題はありませんが、最近、アイテムコントロールに表示されるデータをフェッチするより動的な方法を使用し始めました。私が作り直しているコントロールの1つは、リンクのコレクションです。

私が抱えている問題は、マウスを合わせると各リンクの色が異なることです。1つの赤、1つの青、1つの緑など。データテンプレートでアイテムコントロールを使用するダイナミクスを犠牲にすることなく、これらのアイテムのスタイルを設定する方法はありますか?

4

1 に答える 1

24

これは、ビューモデルのプロパティで単純なコンバーターを使用して行いました。たとえば、これを実行できるスタイルを制御したいブールプロパティがあるとします。

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

    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();
    }

    #endregion
}

次に、リソースとして、2つのスタイルを定義します...

    <common:BoolToStyleConverter x:Key="BoldTextConverter">
        <common:BoolToStyleConverter.TrueStyle>
            <Style TargetType="TextBlock">
                <Setter Property="FontWeight"
                        Value="Bold"></Setter>
            </Style>
        </common:BoolToStyleConverter.TrueStyle>
        <common:BoolToStyleConverter.FalseStyle>
            <Style TargetType="TextBlock">
                <Setter Property="FontWeight"
                        Value="Normal"></Setter>
            </Style>
        </common:BoolToStyleConverter.FalseStyle>
    </common:BoolToStyleConverter>

次に、このようにオブジェクトに適用します...

<TextBlock Text="{Binding Description}"
           Margin="20,4,4,4"
           Style="{Binding IsConfirmed, Converter={StaticResource BoldTextConverter}}"></TextBlock>

IsConfirmedがビューモデルのブールプロパティである場合、これにより、IsConfirmedプロパティが変更された場合でもスタイルの同期が維持されます。

ブール値よりも複雑な条件を使用する場合は、コンバーターで常にオブジェクトのディクショナリをスタイルに作成してから、コンバーターにルックアップを実行させることができますが、通常、ブール値がほとんどの場合に機能することがわかりました。

于 2010-06-13T23:56:55.493 に答える