我希望在鼠标结束并同时选择行时更改数据网格的前景色。
我的代码如下:
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Padding" Value="4,0,0,0"/>
<Setter Property="BorderBrush" Value="#d2c09e"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" TextElement.Foreground="{TemplateBinding Foreground}" SnapsToDevicePixels="True">
<ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="True"/>
<Condition Property="IsMouseOver" Value="True"/>
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter Property="Foreground" Value="Green"/>
</MultiTrigger.Setters>
</MultiTrigger>
</Style.Triggers>
</Style>
它仅改变一个细胞的颜色。
但这有效:
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="True"/>
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter Property="Foreground" Value="Green"/>
</MultiTrigger.Setters>
</MultiTrigger>
当我想在鼠标结束时改变颜色时,它不起作用。
那我怎么能这样做?
提前致谢。 : - )
答案 0 :(得分:0)
当所有条件为真(二元和操作)时, MultiTrigger 会应用关联的setter或操作。因此,在您的情况下,仅当满足IsSelected和IsMouseOver时,前景才会更改。
如上所述,触发器将触发所有条件为AND'd,这就是为什么当你将所有条件放在一起时它不起作用的原因。生成OR(不实现IMultiValueConverter)的最简单方法是使用多个数据触发器(这意味着二进制OR操作)或单独触发。
DataGridCell 可以单独使用触发器而不是 MultiTrigger 。
检查以下代码。我测试了它,它在我身边完美运行。如果有任何问题,请尝试还原。
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Foreground" Value="Green"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Foreground" Value="Green"/>
</Trigger>
</Style.Triggers>