2011-12-13 19 views
6
<ScrollViewer VerticalScrollBarVisibility="Auto" CanContentScroll="True"> 
       <StackPanel Name="basePanel" Orientation="Vertical" Height="450" /> 
      </ScrollViewer> 

Đây là mã cho stackpanel được lấp đầy trong thời gian chạy với nhiều WrapPanels. Trình xem cuộn cuộn qua các bảng - từng cái một - điều này khiến cho nó thực sự bất tiện vì tất cả các bảng đều có kích thước khác nhau. Tôi đã thử điều này one bằng cách thiết lập thuộc tính ScrollViewer.CanContentScroll = "False" trong StackPanel trong khi xóa nó trong ScrollViewer, không giúp đỡ - thanh cuộn biến mất ở tất cả. Giải pháp cho thanh cuộn mượt mà là gì?Cuộn mượt trong ngăn xếp trong wpf

+0

Tôi không chắc nhưng có lẽ bạn StackPanel hoặc một số container khác sử dụng ảo hóa. WPF đôi khi thích áp dụng một thuộc tính "IsVirtualizing = true" mặc định cho nhiều container của nó. – Dror

Trả lời

14

Quấn bạn StackPanel trong một bảng điều khiển

ScrollViewer WPF của cố gắng để di chuyển toàn bộ các yếu tố vào xem cùng một lúc, đó là lý do tại sao bạn thấy những hành vi cuộn tăng vọt. Bằng cách lồng các StackPanel trong Panel khác, ScrollViewer sẽ thử và cuộn toàn bộ StackPanel vào xem, quá lớn nên nó sẽ sử dụng cuộn trơn tru.

Dưới đây là một ví dụ - Loại bỏ DockPanel sẽ cung cấp cho bạn một cuộn giấy tăng vọt, nhưng với nó, bạn sẽ nhận được trơn tru di chuyển hành vi

<ScrollViewer VerticalScrollBarVisibility="Auto" CanContentScroll="True" Height="250"> 
    <DockPanel> 
     <StackPanel Name="basePanel" Orientation="Vertical" Width="200"> 
      <Rectangle Height="75" Fill="Red" Width="200" /> 
      <Rectangle Height="50" Fill="Orange" Width="200" /> 
      <Rectangle Height="75" Fill="Yellow" Width="200" /> 
      <Rectangle Height="75" Fill="Green" Width="200" /> 
      <Rectangle Height="75" Fill="Black" Width="200" /> 
      <Rectangle Height="75" Fill="Purple" Width="200" /> 
     </StackPanel> 
    </DockPanel> 
</ScrollViewer> 
+0

Tôi gói StackPanel với DockPanel nhưng thanh cuộn đã biến mất. – Sergey

+0

@Sergey Bạn có 'Chiều cao' được đặt trên' StackPanel' của bạn, vì vậy nó giới hạn mức độ lớn của StackPanel. Di chuyển thuộc tính 'Height' sang' ScrollViewer' của bạn và nó sẽ hoạt động. – Rachel

+0

bạn là một rockstar! cảm ơn rất nhiều – Sergey