1

現在、以下のようにセットアップされています。

<Trigger Property="IsMouseOver" Value="True">
    <Setter TargetName="rectName" Property="Stroke" Value="Red"/>                                            
    <Setter TargetName="rectName" Property="StrokeThickness" Value="2"/>                    
</Trigger>

つまり、トリガーは、Rectangle の Stroke と Thickness を Red に変更し、MouseOver で 2 に変更します。ただし、これは、長方形のストロークが黒の場合にのみ発生する必要があります (透明なストロークを持つ長方形はほとんどありません)。

この条件をセッターに設定する方法はありますか? これを達成するための邪魔にならない方法を探しています。手がかりはありますか?

以下のような構造がありますか:

<Setter TargetName="rectName" Property="Stroke" Value="If Black Then Black Else Red"/>                                            
4

2 に答える 2

1

ここでこれは機能しますが、マウスオーバーすると色が変化するため、このコードはスタックオーバーフロー例外をスローすることに注意してください。つまり、赤、黒、赤、黒などです:/ rectを追跡する他の方法を提案します状態、おそらく状態を追跡する ViewModel 内の変数であり、コード内で次のように置き換えます。

<Condition  Binding="{Binding RelativeSource={RelativeSource Self}, Path=Stroke}" Value="Black" />

次のようなもので:

<Condition Binding="{Path=RectState}" Value="True" />

そうしないとクラッシュします:) (急いで書いてすみません)

 <Rectangle Height="100" HorizontalAlignment="Left" Margin="182,152,0,0" Name="rectangle1" VerticalAlignment="Top" Width="200" >
        <Rectangle.Style>
            <Style TargetType="Rectangle">
                <Setter Property="Fill" Value="Transparent" />
                <Setter Property="Stroke" Value="Black" />
                <Style.Triggers>                      
                    <MultiDataTrigger>
                        <MultiDataTrigger.Conditions>
                            <Condition  Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}" Value="True" />
                            <Condition  Binding="{Binding RelativeSource={RelativeSource Self}, Path=Stroke}" Value="Black" />
                        </MultiDataTrigger.Conditions>
                        <MultiDataTrigger.Setters>
                            <Setter Property="StrokeThickness" Value="2" />
                            <Setter Property="Stroke" Value="Red" />
                        </MultiDataTrigger.Setters>
                    </MultiDataTrigger>
                </Style.Triggers>
            </Style>
        </Rectangle.Style>
    </Rectangle>
于 2013-03-18T03:55:03.363 に答える
0

MultiTrigger を使用してこれを実現できます (以下のコードはテストされていませんが、十分に近いはずです)。

 <Style.Triggers>
     <MultiTrigger>
        <MultiTrigger.Conditions>
            <Condition Property="IsMouseOver" Value="True" />
            <Condition Property="Stroke" Value="Black" />
        </MultiTrigger.Conditions>
        <Setter TargetName="rectName" Property="Stroke" Value="Red" />
        <Setter TargetName="rectName" Property="StrokeThickness" Value="2" />
     </MultiTrigger>
 </Style.Triggers>
于 2013-03-18T02:11:41.753 に答える