2016-05-29 55 views
0

我想在鼠标结束并且同时选择行时更改数据网格的前景色。WPF Datagrid行前景色multitrigger

我的代码如下:

<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

当所有的条件都真(二进制和操作)MultiTrigger适用相关的制定者或行动。所以,在你的情况下,只有当IsSelected和IsMouseOver满足时,前景才会改变。

如前所述,触发器会触发所有条件为AND'd,这就是为什么当您将所有条件放在一起时它不起作用。生成OR(不实现IMultiValueConverter)的最简单方法是分别使用多个数据触发器(这意味着二进制OR操作)或触发器。

您可以使用触发分别代替MultiTriggerDataGridCell

查看下方的代码。我已经测试过它,它在我身边完美地工作。如果有任何问题,请尝试恢复。

<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> 
+1

这不是我想要的。当这两个动作是真的时,我想设置前景色。 –

+0

然后多触发器就足以完成您的工作。那么你还有什么问题?你想改变整行的前景色吗? – ViVi

+0

是的,这正是我想要的。 –