目前有如下设置:
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="rectName" Property="Stroke" Value="Red"/>
<Setter TargetName="rectName" Property="StrokeThickness" Value="2"/>
</Trigger>
即。触发器在MouseOver上将矩形的描边和粗细更改为红色和2。 但这只有在矩形的笔划为黑色时才会发生(很少有矩形具有透明笔划)
有没有办法把这个条件放在Setter上?我正在寻找一种不太干扰的方式来实现这一目标。任何线索?
是否有类似下面的构造:
<Setter TargetName="rectName" Property="Stroke" Value="If Black Then Black Else Red"/>
答案 0 :(得分: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>
答案 1 :(得分: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>