1

目前有如下设置:

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

即触发器将矩形的描边和粗细更改为红色,鼠标悬停时更改为 2。但这只有在矩形的笔触为黑色时才会发生(很少有矩形有透明笔触)

有没有办法把这个条件放在 Setter 上?我正在寻找一种不那么侵入性的方式来实现这一点。有什么线索吗?

是否有类似以下的构造:

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

2 回答 2

1

在这里这将起作用,但是请注意,此代码将引发堆栈溢出异常,因为当您将鼠标悬停在红色黑色红色黑色等时,颜色会发生变化:/我只是建议一些其他方法来跟踪矩形状态,可能是 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 回答