我试图确定我的鼠标位于 WPF 网格内的哪一行(RowDefinition)。
我尝试将 MouseEnter 事件添加到 RowDefinition,但该事件没有触发,该事件确实在网格本身上触发,但这没有帮助,因为我需要鼠标当前所在行的名称。
提前致谢。
将处理程序放在每个元素上,而不是网格本身上。例如。如果您有
TextBlocks
,您可以使用样式设置处理程序:
<Grid Name="_grid">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.Resources>
<Style TargetType="TextBlock">
<EventSetter Event="MouseEnter" Handler="EventSetter_OnHandler" />
</Style>
</Grid.Resources>
<TextBlock>a</TextBlock>
<TextBlock Grid.Row="1">b</TextBlock>
<TextBlock Grid.Row="2">c</TextBlock>
</Grid>
然后在处理程序中您可以知道来自
MouseEventArgs.Source
的元素。如果您需要找出行号,请执行 GetValue(Grid.RowProperty)
,如果您确实需要 RowDefinition
,请从 Grid.RowDefinitions
获取:
private void EventSetter_OnHandler(object sender, MouseEventArgs e)
{
var element = (FrameworkElement) e.Source;
var rowNumber = (int) element.GetValue(Grid.RowProperty);
RowDefinition rowDefinition = _grid.RowDefinitions[rowNumber];
e.Handled = true;
}
如果您希望事件参数之外的源,您必须将其设置为正确的类型:它必须是 RoutedEventArgs。