0

リスト項目のコンテンツに基づいて色分けされた要素 (プレーン テキスト ブロックの単純なボタン) のリストがあります。ユーザーは Listitem を更新できるため、listitem の色が変わるはずです。「赤」のような特定のリストアイテムの背景色については、パターンも追加したいと思います。

XAML に次の VisualPatterns を追加しました。

<Window.Resources>
    <VisualBrush x:Key="FwdPattern" TileMode="Tile" Viewport="0,0,15,15" ViewportUnits="Absolute" Viewbox="0,0,15,15" ViewboxUnits="Absolute">
        <VisualBrush.Visual>
            <Grid>
                <Path Data="M 0 15 L 15 0" Stroke="Gray" />
            </Grid>
        </VisualBrush.Visual>
    </VisualBrush>
    <VisualBrush x:Key="BckPattern" TileMode="Tile" Viewport="0,0,15,15" ViewportUnits="Absolute" Viewbox="0,0,15,15" ViewboxUnits="Absolute">
        <VisualBrush.Visual>
            <Grid>
                <Path Data="M 0 0 L 15 15" Stroke="Gray" />
            </Grid>
        </VisualBrush.Visual>
    </VisualBrush>
</Window.Resources>

ListItem で使用されるボタン テンプレートは次のとおりです。

<Border Background="{Binding BackgroundClr}">
    <Button Name="MyButton" Content="Testing">
        <Button.Style>
            <Style TargetType="{x:Type Button}">
                <Setter Property="Background" Value="{Binding BackgroundClr}"/>
                <Style.Triggers>

                <!-- This does not work, see [http://stackoverflow.com/questions/39583263/brush-mvvm-binding-does-not-give-named-color/39583422#39583422][1] -->

                    <DataTrigger Binding="{Binding BackgroundClr}" Value="Red">
                        <Setter Property="Background" Value="{StaticResource BckPattern}"/>
                    </DataTrigger>

                <!-- This does not work either, it goes in infinite loop 
                     and StackOverflow exception is thrown- 
                     probably because I am reading the background color in
                     the datatrigger and again updating it- but i dont know-->

                    <DataTrigger Binding="{Binding Background.Color, RelativeSource={RelativeSource Self}}" Value="Red">
                       <Setter Property="Background" Value="{StaticResource BckPattern}"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
    </Button>
</Border>

現在、VM の Button BackgroundClr 以外に、パターンを提供する必要があるかどうかを判断するための知識はありません。

  • 試した解決策

    1. 1 つの解決策は、プロパティ PatternName をバインドし、それに基づいて適用するパターンを決定することです。

上記のコードは機能しますが、VM に追加のプロパティが必要です

  1. もう 1 つの解決策は、VM で VisualBrush にアクセスし、BackgroundClr でパターンを直接適用することです。これを行う方法はまだわかりません。

どちらがより良い解決策ですか、それとも同じことを達成する他の方法はありますか?

ありがとう、

RDV

4

1 に答える 1

0

に変更{Binding BackgroundClr}{Binding BackgroundClr.Color}ます。

于 2016-09-21T08:20:09.267 に答える