WPF 网格中行定义上的MouseEvent

问题描述 投票:0回答:2

我试图确定我的鼠标位于 WPF 网格内的哪一行(RowDefinition)。

我尝试将 MouseEnter 事件添加到 RowDefinition,但该事件没有触发,该事件确实在网格本身上触发,但这没有帮助,因为我需要鼠标当前所在行的名称。

提前致谢。

wpf mouseevent
2个回答
1
投票

将处理程序放在每个元素上,而不是网格本身上。例如。如果您有

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;
}

0
投票

如果您希望事件参数之外的源,您必须将其设置为正确的类型:它必须是 RoutedEventArgs。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.