如何检测底层的事件

时间:2017-01-16 11:36:14

标签: c# xaml

我有一个网格,其中的内容被添加到listview中。我添加了另一个网格,它是listview上的叠加。我需要滚动底层网格中的项目。

 <Grid>
        <ListView>
            <TextBlock Text="CONTENT"/>
            <TextBlock Text="CONTENT"/>
            <TextBlock Text="CONTENT"/>
            <TextBlock Text="CONTENT"/>
            <TextBlock Text="CONTENT"/>
            <TextBlock Text="CONTENT"/>
            <TextBlock Text="CONTENT"/>
            <TextBlock Text="CONTENT"/>
            <TextBlock Text="CONTENT"/>
            <TextBlock Text="CONTENT"/>
            <TextBlock Text="CONTENT"/>
            <TextBlock Text="CONTENT"/>
            <TextBlock Text="CONTENT"/>
            <TextBlock Text="CONTENT"/>
            <TextBlock Text="CONTENT"/>
            <TextBlock Text="CONTENT"/>
            <TextBlock Text="CONTENT"/>
            <TextBlock Text="CONTENT"/>
            <TextBlock Text="CONTENT"/>
            <TextBlock Text="CONTENT"/>
            <TextBlock Text="CONTENT"/>
            <TextBlock Text="CONTENT"/>
            <TextBlock Text="CONTENT"/>
            <TextBlock Text="CONTENT"/>
            <TextBlock Text="CONTENT"/>
        </ListView>
        <Grid Background="Transparent" ManipulationDelta="Grid_ManipulationDelta" ManipulationMode="All"/>
    </Grid> 

1 个答案:

答案 0 :(得分:0)

您可以捕获鼠标事件(或更好的PreviewMouseWheel事件)并明确地为列表视图重新提升它:

<Grid>
    <ListView x:Name="listview1">
        <TextBlock Text="CONTENT"/>
        <TextBlock Text="CONTENT"/>
        <TextBlock Text="CONTENT"/>
        <TextBlock Text="CONTENT"/>
        <TextBlock Text="CONTENT"/>
        <TextBlock Text="CONTENT"/>
        <TextBlock Text="CONTENT"/>
        <TextBlock Text="CONTENT"/>
        <TextBlock Text="CONTENT"/>
        <TextBlock Text="CONTENT"/>
        <TextBlock Text="CONTENT"/>
        <TextBlock Text="CONTENT"/>
        <TextBlock Text="CONTENT"/>
        <TextBlock Text="CONTENT"/>
        <TextBlock Text="CONTENT"/>
        <TextBlock Text="CONTENT"/>
        <TextBlock Text="CONTENT"/>
        <TextBlock Text="CONTENT"/>
        <TextBlock Text="CONTENT"/>
        <TextBlock Text="CONTENT"/>
        <TextBlock Text="CONTENT"/>
        <TextBlock Text="CONTENT"/>
        <TextBlock Text="CONTENT"/>
        <TextBlock Text="CONTENT"/>
        <TextBlock Text="CONTENT"/>
    </ListView>
    <Grid Background="Transparent" PreviewMouseWheel="Grid_PreviewMouseWheel"/>
</Grid>

转发活动的代码:

private void Grid_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
    if (!e.Handled)
    {
        Decorator border = VisualTreeHelper.GetChild(listview1, 0) as Decorator;
        ScrollViewer sv = border.Child as ScrollViewer;
        var arg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta) { RoutedEvent = UIElement.MouseWheelEvent, Source = sender };
        sv.RaiseEvent(arg);
    }
}

注意我刚刚使用我找到的第一种方式来到ScrollViewer内的ListView,可能会有更好/更多的保存/ ......方法。

如果您不再需要重叠式鼠标滚轮事件,请选择标记e.Handled = true;