2012-08-17 14 views
5

Actualmente estoy compilando una aplicación Windows 8 XAML C#. En una página, tengo un scrollviewer para desplazamiento horizontal y desplazamiento. Tengo varios controles que funcionan muy bien con scorllviewer. Pero cuando se desplaza y su cursor se encuentra en la parte superior de ListView/GridView, ese control manejará scrollnig en lugar del scrollviewer. Con deslizar esto no sucede, pero con la rueda de desplazamiento del mouse detiene el desplazamiento de desplazamiento de vista. ¿Alguien sabe cómo deshabilitar este comportamiento o tiene una solución alternativa?ScrollViewer GridView XAML

Respuesta

0

Este es un problema que veo también. No existe en contacto: solo parece ocurrir cuando se usa la rueda del mouse. Aún no sé de una solución alternativa. No creo que haya uno.

1

Después de trabajar con este problema por un tiempo decidí cambiar de táctica. Al menos en mi solución, cambié el GridView interno para que fuera solo un ItemsControl. De esa manera puedo manejar todo el clic/toque pero aún así dejar que el desplazamiento funcione como se espera.

Por supuesto, esta solución no es para todo el mundo, ya que a veces necesita todo el material de selección también. Pero para mí funcionó ya que solo necesitaba el elemento clic/toque.

creo que sirve

0

he encontrado una solución aquí: msdn workaround

Básicamente lo que tienes que hacer lo siguiente:

Base XAML:

<Grid Name="BaseElement"> 
     <ScrollViewer Name="MainScrollViewer" Style="{StaticResource HorizontalScrollViewerStyle}" VerticalScrollMode="Auto"> 
      <GridView /> 
      <GridView /> 
     </ScrollViewer> 
    </Grid> 
  1. Añadir un nuevo Controlador del elemento raíz:

    BaseElement.AddHandler(PointerWheelChangedEvent, new PointerEventHandler(Bubble_PointerWheelChanged), true); 
    
  2. Realizar el controlador al handel el desplazamiento:

    private void Bubble_PointerWheelChanged(object sender, PointerRoutedEventArgs e) 
    { 
        // Could walk up the tree to find the next SV or just have a reference like here: 
        MainScrollViewer.ScrollToHorizontalOffset(MainScrollViewer.HorizontalOffset - e.GetCurrentPoint(null).Properties.MouseWheelDelta); 
    } 
    
0

mejor solución nunca.

public class CustomGridView : GridView 
{ 
    protected override void OnApplyTemplate() 
    { 
     base.OnApplyTemplate(); 
     var sv = this.GetTemplateChild("ScrollViewer") as UIElement; 
     if (sv != null) 
      sv.AddHandler(UIElement.PointerWheelChangedEvent, new PointerEventHandler(OnPointerWheelChanged), true); 
    } 

    private void OnPointerWheelChanged(object sender, PointerRoutedEventArgs e) 
    { 
     e.Handled = false; 
    } 
} 

Más información: GridView in a ScrollViewer

0

1.Add este código en View.cs:

private void ThumbnailViewer_OnMouseWheel(object sender, MouseWheelEventArgs e) 
    { 
     ThumbnailViewerScroller.ScrollToHorizontalOffset(ThumbnailViewerScroller.HorizontalOffset - e.Delta); 
    } 

código 2.Add en XAML:

<ScrollViewer 
      x:Name="ViewerScroller"    
      MouseWheel="ThumbnailViewer_OnMouseWheel"> 
<StackPanel> 
... 
</StackPanel> 
</ScrollViewer> 
Cuestiones relacionadas