将事件路由到当前元素下的元素

时间:2016-02-24 10:17:24

标签: c# xaml windows-8 microsoft-metro windows-8.1

我一直试图让一个画布有两层。一层水平滚动,第二层位于顶部并垂直滚动。 在第二层(垂直滚动的层)中,我堆叠了一个透明网格(或面板)和一个带有信息的面板,这样我们就可以看到第一层在这一层下面,如果我们向上滚动,我们就会得到以下信息:出现在屏幕上。

这就像魅力一样,只是如果我水平滚动,第一层(下面的那个)根本不会滚动。如果我们滑动透明网格,如果垂直滚动不滚动,则不成问题。

这是我的xaml

<Canvas x:Name="Canvas">
    <local:MyPage x:Name="PageContainer"/> <!--This one scrolls horizontally -->
    <ScrollViewer
                  HorizontalScrollBarVisibility="Disabled"
                  VerticalScrollBarVisibility="Hidden"
                  Height="{Binding ActualHeight, ElementName=UcRoot}">
<!--This one scrolls vertically and appears on top -->
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <Grid Height="600" Width="600" Grid.Row="0" x:Name="TransparentGrid" ></Grid>
            <Grid x:Name="Information" Background="Azure" Height="1200" Width="600" Grid.Row="1">
            </Grid>
        </Grid>
    </ScrollViewer>

</Canvas>

我在透明网格上尝试了很多东西(将宽度设置为1,将其移除并将信息网格边距设置为顶部为1200),但网格捕获事件并且不会转发到我的页面。

我可以得到一些帮助吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

您必须将背景设置为'Transparent'到网格才能点按它并滑动..您可能需要使用以下属性:

ScrollViewer.VerticalScrollMode
ScrollViewer.HorizontalScrollMode

虽然这是我建议的解决方案:

        <ScrollViewer ScrollViewer.VerticalScrollMode="Enabled" ScrollViewer.HorizontalScrollMode="Disabled" >
            <Grid >
                <TextBlock Text="contnet" />
            </Grid>
        </ScrollViewer>

        <ScrollViewer  ScrollViewer.VerticalScrollMode="Disabled" ScrollViewer.HorizontalScrollMode="Enabled"  >
            <Grid Background="Transparent">
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                </Grid.RowDefinitions>
                <Grid Height="600" Width="600" Grid.Row="0" x:Name="TransparentGrid" Background="Transparent" ></Grid>
                <Grid x:Name="Information" Background="Azure" Height="1200" Width="600" Grid.Row="1"/>


            </Grid>
        </ScrollViewer>

    </Canvas>