【发布时间】:2018-11-06 22:54:58
【问题描述】:
我想将 MouseEnter 和 MouseLeave EventTriggers 应用于 WPF GridView 的整行。我使用下面的代码将事件触发器添加到单个列,当鼠标移到该列中的 文本 上时触发。
<ListView x:Name="MyList" ItemsSource="{Binding listItems}">
<ListView.View>
<GridView>
<GridViewColumn Header="Tag" Width="100" >
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Tag}" Foreground="{Binding ForegroundColor}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseEnter">
<i:InvokeCommandAction Command="{Binding Path=MouseEnterCommand}"/>
</i:EventTrigger>
<i:EventTrigger EventName="MouseLeave">
<i:InvokeCommandAction Command="{Binding Path=MouseLeaveCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBlock>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Description" Width="300" DisplayMemberBinding="{Binding Description}"/>
<GridViewColumn Header="Qty" Width="80" DisplayMemberBinding="{Binding Qty}"/>
</GridView>
</ListView.View>
</ListView>
除了在每个 CellTemplate 中复制相同的触发器代码之外,有没有更简洁的方法将触发器应用于整个行,这样当鼠标进入或离开 该行上的任何区域时,事件被触发?
【问题讨论】:
-
复制DataGridRow的ControlTemplate并将事件触发器添加到其中的根元素中。
-
从哪里复制?如何查看 DataGridRow ControlTemplate 的默认源代码?
-
在 VS 或 Blend 的设计模式中右键单击 DataGridRow 元素,然后选择“编辑模板”->“编辑副本”。
标签: wpf xaml gridview eventtrigger gridviewrow