2012-08-17 24 views
5

Tôi hiện đang xây dựng ứng dụng Windows XAML C# 8. Trong một trang, tôi có một scrollviewer cho swiping và di chuyển ngang. Tôi có một số điều khiển trong nó mà làm việc thực sự tốt với scorllviewer. Nhưng khi bạn di chuyển và con trỏ của bạn ở trên cùng của ListView/GridView, thì điều khiển đó sẽ xử lý scrollnig thay vì scrollviewer. Với thao tác vuốt này không xảy ra, nhưng với con lăn chuột, nó sẽ dừng cuộn cuộn scrollview. Có ai biết cách vô hiệu hóa hành vi này hoặc có cách giải quyết không?ScrollViewer GridView XAML

Trả lời

0

Đây cũng là vấn đề tôi thấy. Nó không tồn tại trong liên lạc - chỉ có vẻ xảy ra khi sử dụng bánh xe chuột. Tôi chưa biết cách giải quyết. Tôi không nghĩ có một.

1

Sau khi làm việc với vấn đề này trong một thời gian, tôi quyết định thay đổi chiến thuật. Ít nhất trong giải pháp của tôi, tôi đã thay đổi bên trong GridView thành chỉ là ItemsControl. Bằng cách đó tôi có thể xử lý tất cả các nhấp chuột/tap nhưng vẫn cho phép di chuyển công việc như mong đợi.

Tất nhiên, giải pháp này không dành cho tất cả mọi người vì đôi khi bạn cũng cần tất cả các công cụ lựa chọn. Nhưng đối với tôi nó đã làm việc như tôi chỉ cần mục bấm/tap.

Hy vọng nó giúp

0

Tôi tìm thấy một workaround ở đây: msdn workaround

Về cơ bản bạn phải làm như sau:

cơ sở XAML:

<Grid Name="BaseElement"> 
     <ScrollViewer Name="MainScrollViewer" Style="{StaticResource HorizontalScrollViewerStyle}" VerticalScrollMode="Auto"> 
      <GridView /> 
      <GridView /> 
     </ScrollViewer> 
    </Grid> 
  1. Thêm mới Trình xử lý cho phần tử gốc:

    BaseElement.AddHandler(PointerWheelChangedEvent, new PointerEventHandler(Bubble_PointerWheelChanged), true); 
    
  2. Thực hiện Handler Handel sự di chuyển:

    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

Tôi cũng có cùng một vấn đề. Sau đó, tôi đã cố gắng loại bỏ cuộn thanh từ mẫu Lưới như đã đề cập ở bên dưới chủ đề .. nó làm việc tốt cho tôi ..

https://stackoverflow.com/a/10305608/2444509

+0

Hãy tóm tắt các liên kết trong câu trả lời của bạn. – michaelb958

0

Giải pháp tốt nhất bao giờ hết.

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

Thông tin thêm: GridView in a ScrollViewer

0

1.Add mã này trong View.cs:

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

đang 2.Add trong XAML:

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