将鼠标悬停在ListViewItem上时,更改我的绑定Check-Box样式

时间:2018-01-24 11:41:42

标签: wpf

所以我ListViewCheck-Box小区:

<ListView.Resources>
   <DataTemplate x:Key="CheckBoxCell">
      <CheckBox IsChecked="{Binding Path=IsChecked}"/>
   </DataTemplate>
</ListView.Resources>

<ListView.View>
   <GridViewColumn Width="30"  x:Name="gridViewColumnIsChecked" CellTemplate="{StaticResource CheckBoxCell}"/>
</ListView.View>

我的ListViewItem样式有多个触发器,例如IsMouseOver,所以当IsMouseOverTrue时,我会更改Background color

因此,当鼠标悬停在Check-Box上时,我想更改ListViewItem样式\颜色。

我如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

使用此代码段:

    <DataTemplate x:Key="CheckBoxCell">
        <CheckBox>
            <CheckBox.Style>
                <Style TargetType="CheckBox">
                    <Style.Triggers>
                        <DataTrigger Value="True" Binding="{Binding Path=IsMouseOver, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListBoxItem}}">
                            <Setter Property="Background" Value="Red"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </CheckBox.Style>
        </CheckBox>
    </DataTemplate>

答案 1 :(得分:0)

解决方案是创建一个DataTrigger,它绑定到父ListViewItem.IsMouseOver属性,就像另一个答案显示

但是,触发器也可以放在<DataTemplate.Triggers>中以缩短标记。在这种情况下,Setter使用TargetName来访问正确的控件。

<DataTemplate x:Key="CheckBoxCell">
    <CheckBox IsChecked="{Binding Path=IsChecked}" Name="Chk" />
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding Path=IsMouseOver, RelativeSource={RelativeSource AncestorType=ListBoxItem}}"
                     Value="True">
            <Setter TargetName="Chk" Property="Background" Value="Red" />
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>