2016-02-24 1 views
0

J'ai essayé d'avoir une toile avec deux couches. Une couche défile horizontalement, la deuxième est en haut et défile verticalement. Dans la deuxième couche (celle qui défile verticalement), j'ai empilé une grille transparente (ou panneau) et un panneau avec des informations afin que nous puissions voir la première couche qui est sous celle-ci et si nous remontons, nous avons l'information qui apparaît sur l'écran.Route d'événement à l'élément sous l'élément en cours

Cela fonctionne comme un charme sauf que si je fais défiler horizontalement, le premier calque (le dessous) ne défile pas du tout. Ce n'est pas un problème si les défilements verticaux ne défilent pas si on balaye la grille transparente.

Ceci est mon 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> 

J'ai essayé beaucoup de choses sur la grille transparente (réglage de la largeur à 1, enlever et fixer la marge bénéficiaire de la grille d'information supérieure à 1200 par exemple), mais la grille capture l'événement et ne pas relayer à ma page.

Puis-je obtenir de l'aide?

Merci!

+0

Que diriez-vous ensemble 'ScrollViewer Marge = "0, 0, 0, 25"'? Votre couche est transparente, cela peut être OK – Sakura

+0

Cela ne fonctionne pas. Le panneau d'information doit prendre toute la largeur de ma toile et il devrait répondre au balayage de doigt aussi – Daniel

+0

Ensuite, vous devez [handle] (http://stackoverflow.com/a/12662362/1560697) Événement 'ManipulationDelta' sur le dessus couche. Si l'utilisateur essuie gauche/droite, vous faites défiler la couche inférieure en conséquence – Sakura

Répondre

1

Vous devez définir l'arrière-plan 'Transparent' au réseau afin de pouvoir taper sur et swipe .. et vous avez besoin peut-être ces propriétés à jouer avec:

ScrollViewer.VerticalScrollMode 
ScrollViewer.HorizontalScrollMode 

Bien, ceci est mon solutions proposées:

 <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> 
+0

Merci pour le mode de défilement. Cela m'a aidé à résoudre un autre bug (c'est pourquoi je vous ai donné +1). Cependant, cela n'a pas résolu le problème initial. – Daniel

+0

Bon d'entendre ça: D .. Donc, je peux vous mal comprendre dans ce domaine, pouvez-vous s'il vous plaît être plus clair sur votre problème? Voulez-vous avoir un en-tête supérieur avec un arrière-plan transparent avec la possibilité de le faire défiler horizontalement avec certains éléments? –