2009-08-12 34 views
10

Tôi có một ListBox hiển thị danh sách các điều khiển WPF. Vấn đề của tôi là thanh cuộn dọc hiển thị nhưng bị tắt ngay cả khi có đủ các mục mà ListBox có thể cuộn được. Một thực tế khác có thể có liên quan là điều này được chứa trong một Integration.ElementHost.Thanh cuộn trong Hộp danh sách không hoạt động

WPF noobie, Jim

Đây là XAML cho ListBox:

// for brevity I removed the Margin and Tooltip attributes 

    <Grid x:Class="Xyzzy.NoteListDisplay" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <StackPanel Name="stackPanel" Orientation="Vertical" 
       ScrollViewer.VerticalScrollBarVisibility="Visible"> 
     <StackPanel Orientation="Horizontal"> 
      <CheckBox Name="AllRecent" IsChecked="False" >View All Recent</CheckBox> 
      <CheckBox Name="AscendingOrder" IsChecked="False">Descending Order</CheckBox> 
      <Button Name="btnTextCopy" Click="btnCopyText_Click">Copy All</Button> 
     </StackPanel> 
     <ListBox Name="NoteList" 
       ScrollViewer.CanContentScroll="True" 
       ScrollViewer.VerticalScrollBarVisibility="Visible"> 
     </ListBox> 
     </StackPanel> 
    </Grid> 

Và XAML cho điều khiển hiển thị trong mỗi ListBox mục:

<UserControl x:Class="Xyzzy.NoteDisplay" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Grid> 
     <StackPanel Orientation="Vertical"> 
     <StackPanel Orientation="Horizontal"> 
      <TextBlock Name="Heading" FontSize="10">Note Heading</TextBlock> 
      <Button Name="btnCopyText" Height="20" FontSize="12" 
          Click="btnCopyText_Click">Copy 
      </Button> 
     </StackPanel> 
     <TextBlock Name="Body" FontSize="14">Note Body</TextBlock> 
     </StackPanel> 
    </Grid> 
    </UserControl> 

Trả lời

23

Tôi gặp sự cố với khả năng hiển thị của thanh cuộn khi sử dụng StackPanel. Tôi nghĩ rằng đó là bởi vì StackPanel luôn luôn lớn như nó cần phải được chứa tất cả các con của nó. Hãy thử sắp xếp lại bố cục để xóa StackPanel (thay vào đó hãy sử dụng Grid) và xem có giúp ích gì không.

+0

Khi tôi đặt Listbox vào Grid thay vì StackPanel, vấn đề sẽ biến mất. Tôi đây là lỗi mã WPF, lỗi thiết kế WPF hoặc hành vi WPF có chủ ý? –

+0

Tôi nghĩ đó chỉ là cách mà StackPanel hoạt động. Trong trường hợp của bạn, StackPanel cao bằng ListBox cần thiết mà không cần cuộn, thì StackPanel bị "cắt" ở phía dưới. –

+0

Có, vấn đề là với StackPanel và sự cố được Grid giải quyết. Thanks @JohnMyczek –

2

Heya, tôi nghi ngờ những gì có thể xảy ra là ListBox của bạn đang mở rộng đủ cho mọi mục, tuy nhiên ListBox thực sự biến mất ở dưới cùng của Chứa kiểm soát.

Hộp danh sách có thực sự dừng đúng cách hay không dường như biến mất không? Hãy thử thiết lập một MaxHeight trên ListBox và xem nếu điều đó làm cho thanh cuộn xuất hiện. Bạn sẽ có thể thiết lập VerticalScrollBarVisibility thành Auto để nó chỉ xuất hiện khi cần thiết.

+0

Tôi nên đề cập rằng tôi đã thử hạn chế kích thước của Listbox chính xác như bạn đề xuất. Kết quả không được cải thiện. –

0

Một giải pháp khác cho vấn đề này hoạt động tốt là đặt ScrollViewer xung quanh StackPanel.

2

Nếu hộp danh sách là bên trong một StackPanel, hãy thử các bước này cho ListBox của bạn

  1. Set ScrollViewer.VerticalScrollBarVisibility = "Auto"
  2. Thiết lập thuộc tính Height của một ListBox để một độ cao nào mà bạn mong đợi để xem.

Điều đó sẽ buộc thanh cuộn hiển thị.

1

Điều này khá muộn, nhưng bất kỳ ai sử dụng ListBox có lẽ không nên có trong StackPanel. Một khi tôi chuyển đổi kiểm soát cha mẹ của Listbox của tôi từ StackPanel để DockPanel với LastChildFill = True (Trường hợp hộp danh sách là điều khiển cuối cùng), thanh cuộn của tôi hoạt động hoàn hảo.

Hy vọng điều này sẽ giúp ai đó gặp sự cố không được giải quyết bằng câu trả lời ở trên.

0

Một giải pháp khác có sửa đổi đối với Dave là chỉ sử dụng ScrollViewer. Bạn chỉ có thể cuộn bằng cách đặt chuột vào ScrollBar của ScrollView. Tôi sử dụng nó theo cách này bởi vì tôi không thích cách ListBox nhảy từ mục này sang mục khác và đôi khi mất các mục từ trên cùng. Một chút khó khăn trên đôi mắt quá. Tôi thích cuộn trơn của ScrollViewer.

+0

Chỉ cần đọc bài đăng này để thêm cuộn khi chuột trên ListBox. http://stackoverflow.com/questions/2976240/how-can-make-scrollviewer-scroll-when-mouse-is-over-any-content?rq=1 – VcDeveloper

4

Bạn chỉ cần giới thiệu Height tài sản, như thế này:

<ListBox Height="200" 
     Name="NoteList" 
     ScrollViewer.CanContentScroll="True" 
     ScrollViewer.VerticalScrollBarVisibility="Visible"> 
</ListBox> 
Các vấn đề liên quan