2017-02-28 74 views
2

我有一個Scrollviewer包裝ListView電影海報,它是可滾動verticaly和horizo​​ntaly,也可縮放。UWP IsVerticalRailEnabled無法正常工作

當我將IsHorizontalRailEnabled="False"設置爲Scrollviewer時,水平導軌被禁用,但無論我分配給IsVerticalRailEnabled的值如何,導軌都不會被禁用。

<ScrollViewer ZoomMode="Enabled" 
       MinZoomFactor="0.1" 
       MaxZoomFactor="1" 
       VerticalScrollBarVisibility="Auto" 
       HorizontalScrollBarVisibility="Auto" 
       IsVerticalRailEnabled="False" 
       IsHorizontalRailEnabled="False"> 
    <ListView Grid.Row="0" 
          Name="MovieListView" 
          ItemTemplate="{StaticResource ItemTemplate}" 
          ItemsSource="{Binding movie_posters_list}"> 
     <ListView.ItemsPanel> 
      <ItemsPanelTemplate> 
       <ItemsWrapGrid MaximumRowsOrColumns="15" Orientation="Horizontal" /> 
      </ItemsPanelTemplate> 
     </ListView.ItemsPanel> 
    </ListView> 
</ScrollViewer> 

我找不到有關這種奇怪行爲的任何有用的文檔,任何想法如何糾正它?

+0

看到這個職位http://stackoverflow.com/questions/31358080/scrollviewer-ishorizo​​ntalrailenabled-false-or-scrollviewer-ishorizo​​ntalrailena –

+0

儘管後似乎顯示出類似的問題,給出的答案是鬆散相關的:( – Karalix

回答

1

編輯:由於賈斯汀XL在評論中提到,這種方式打破了ListView的UI虛擬化,因此應該避免。請參閱他的評論以獲取更多信息

我自己找到了答案。我不完全明白爲什麼我必須這樣做才能工作,但確定。如果你有一個解釋,爲什麼我必須複製財產用法,我將不勝感激:)

我所要做的就是將ScrollViewer.IsVerticalRailEnabled="False"添加到我的ListView元素。

請注意,我必須在我的ScrollViewer中保留IsVerticalRailEnabled="False"才能使其工作。

這裏是更新的XAML:

<ScrollViewer ZoomMode="Enabled" 
       MinZoomFactor="0.1" 
       MaxZoomFactor="1" 
       VerticalScrollBarVisibility="Auto" 
       HorizontalScrollBarVisibility="Auto" 
       IsVerticalRailEnabled="False" 
       IsHorizontalRailEnabled="False"> 
    <ListView Name="MovieListView" 
       ItemTemplate="{StaticResource ItemTemplate}" 
       ItemsSource="{Binding movie_posters_list}" 
       ScrollViewer.IsVerticalRailEnabled="False"> 
     <ListView.ItemsPanel> 
      <ItemsPanelTemplate> 
       <ItemsWrapGrid MaximumRowsOrColumns="15" Orientation="Horizontal" /> 
      </ItemsPanelTemplate> 
     </ListView.ItemsPanel> 
    </ListView> 
</ScrollViewer> 
+1

'ListView'控件已經有了'ControlTemplate'內置的'ScrollViewer',你應該操縱它的內部'ControlTemplate'而不是用另一個包裝它。使用一個'GridView'代替,它也有一個'ScrollViewer'內置的。你當前的實現打破了控件默認的UI虛擬化行爲。 –

+0

感謝您的建議@JustinXL我申請了他們,就像一個魅力! – Karalix

+0

很高興幫助! :) –