2012-12-12 55 views
4

我正在使用GridView來顯示項目列表。我需要能夠使用鼠標滾輪在包含GridView的頁面中滾動。這是很容易實現通過重寫的GridView控件啓用鼠標滾動,同時保持觸摸選擇項目的能力

<GridView.Template> 
     <ControlTemplate> 
      <ItemsPresenter /> 
     </ControlTemplate> 
</GridView.Template> 

模板不過,我還需要的項目可選擇從觸摸設備。這通常通過向下輕彈一個項目完成,然後選擇它。在應用上述模板覆蓋之後,觸摸選擇機制中斷。

我走進混合,並開始尋找爲GridView的默認模板,可以在下面

<ControlTemplate 
    TargetType="GridView"> 
    <Border 
     BorderBrush="{TemplateBinding BorderBrush}" 
     BorderThickness="{TemplateBinding BorderThickness}" 
     Background="{TemplateBinding Background}"> 
     <ScrollViewer 
      x:Name="ScrollViewer" 
      BringIntoViewOnFocusChange="{TemplateBinding ScrollViewer.BringIntoViewOnFocusChange}" 
      HorizontalScrollMode="{TemplateBinding ScrollViewer.HorizontalScrollMode}" 
      HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}" 
      IsHorizontalRailEnabled="{TemplateBinding ScrollViewer.IsHorizontalRailEnabled}" 
      IsHorizontalScrollChainingEnabled="{TemplateBinding ScrollViewer.IsHorizontalScrollChainingEnabled}" 
      IsVerticalScrollChainingEnabled="{TemplateBinding ScrollViewer.IsVerticalScrollChainingEnabled}" 
      IsVerticalRailEnabled="{TemplateBinding ScrollViewer.IsVerticalRailEnabled}" 
      IsDeferredScrollingEnabled="{TemplateBinding ScrollViewer.IsDeferredScrollingEnabled}" 
      TabNavigation="{TemplateBinding TabNavigation}" 
      VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}" 
      VerticalScrollMode="{TemplateBinding ScrollViewer.VerticalScrollMode}" 
      ZoomMode="{TemplateBinding ScrollViewer.ZoomMode}"> 
      <ItemsPresenter 
       HeaderTemplate="{TemplateBinding HeaderTemplate}" 
       Header="{TemplateBinding Header}" 
       HeaderTransitions="{TemplateBinding HeaderTransitions}" 
       Padding="{TemplateBinding Padding}" /> 
     </ScrollViewer> 
    </Border> 
</ControlTemplate> 

可以看出如果我刪除的ScrollViewer或禁用水平滾動部分以任何方式再觸摸選擇停止工作。

如何同時啓用鼠標滾動和觸摸選擇?

而只是爲了澄清,我不需要同時發生的行動。兩者都需要在相同的GridView的同一頁面上單獨工作。

+0

你可能會因爲改變控制模板而錯誤地改變方向。以下鏈接是否可解決您正在嘗試執行的操作? http://stackoverflow.com/questions/13470083/listview-item-selection-windows-store/13475061#13475061 –

+0

不,看來水平滾動和觸摸拖動選擇目前是互斥的。 –

+0

對不起,我沒有用鼠標來測試這個(在路上)。現在我知道了。我可以使用滾輪滾動並使用上面鏈接中的設置拖動選中網格。任何你使用VS模擬器進行測試的機會?如果是這樣,你必須先在模擬器內點擊你的應用程序,然後才能註冊滾輪。在模擬器之外,您不必這樣做。 –

回答

5

我不認爲你的情況是可能的。內部網格的SV是問題。 MSDN文檔說,在GridView防止PointerWheelChanged事件冒泡:

GridView docs:

小心PointerWheelChanged事件從一個GridView達不到泡沫。這意味着如果指針位於GridView上,那麼其中包含GridView的控件不會收到鼠標滾輪更改消息。例如,如果將一個GridView放入一個ScrollViewer中,則當指針位於GridView上時,不能用鼠標滾輪滾動ScrollViewer。

+0

對此的評論。這似乎不再是8.1中的一個問題。還沒有檢查它是否已在8.0中修復。 –

相關問題