2017-02-28 72 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

很高兴帮助! :) –