2010-11-15 35 views
7

Tôi đã có một ứng dụng có nhiều điều khiển ListView trong đó có yêu cầu rằng mục trong ListView phải hiển thị đầy đủ. Không bao giờ nên hiển thị một phần của ListViewItem trong danh sách. Nếu người dùng phát hành ScrollViewer ở vị trí kết thúc hiển thị một phần, thì danh sách sẽ "chụp" và sửa chính nó để chỉ các mục hoàn chỉnh mới được hiển thị.Danh sách WPF Luôn hiển thị các mục hoàn chỉnh

Có ai đã làm điều này trước đây không? Tôi nghĩ rằng tôi sẽ cần phải quá tải ListView và/hoặc ScrollViewer để làm điều này. Tôi đang tìm kiếm các đề xuất về cách tiếp cận điều này. Cảm ơn.

Đây là một trong những danh sách của tôi:

<ctrls:SnapList x:Name="PART_ProductList" 
              ScrollViewer.CanContentScroll="False" 
              ScrollViewer.VerticalScrollBarVisibility="Auto" 
              ScrollViewer.HorizontalScrollBarVisibility="Hidden" 
              ItemContainerStyle="{StaticResource ProductFinderItem}" 
              Canvas.Top="373" Canvas.Left="75" 
              Height="910" Width="900" > 

          <ctrls:SnapList.ItemsPanel> 
            <ItemsPanelTemplate> 
             <VirtualizingStackPanel VirtualizingStackPanel.IsVirtualizing="True" VirtualizingStackPanel.VirtualizationMode="Standard" /> 
           </ItemsPanelTemplate> 
          </ctrls:SnapList.ItemsPanel> 

          <ctrls:SnapList.Template> 
            <ControlTemplate> 
            <ScrollViewer x:Name="Scroller" VerticalAlignment="Top" CanContentScroll="True" Style="{StaticResource VertScrollViewer}" Focusable="false" > 
               <ItemsPresenter /> 
              </ScrollViewer> 
            </ControlTemplate> 
          </ctrls:SnapList.Template> 
         </ctrls:SnapList> 
+0

Bạn đang nói đến ScrollViewer nào? Bạn có một ScrollViewer trong một Grid (hoặc một cái gì đó) có chứa nhiều ListViews và khi đó ScrollViewer thay đổi vị trí sau đó bạn muốn chắc chắn rằng tất cả ListViewItems có thể nhìn thấy? Đối với một ListView chính nó, tôi thậm chí không thể có được nó để hiển thị một phần mục. –

+0

Tôi đang nói về ScrollViewer trong ControlTemplate của danh sách. Tôi đã thêm xaml cho một trong các danh sách vào bài đăng của tôi. ScrollViewer Tôi đang nói về là một với x: Name = "Scroller" trong ví dụ XAML. –

+0

* ListBox * có cùng một hành vi giống nhau theo mặc định. Bạn có thể sử dụng * ListBox * thay vì * ListView * không? – decyclone

Trả lời

0

Bạn đã thử ListView.ScrollIntoView?

+0

ScrollIntoView sẽ cuộn một mục vào xem, nhưng nó không có gì để đảm bảo chỉ toàn bộ các mục có thể nhìn thấy trong một danh sách. Ngay cả khi nó đã làm, tôi vẫn cần phải biết khi nào nên gọi nó (ví dụ như khi một phần các mặt hàng được hiển thị). –

+0

Câu hỏi hiện tại của bạn rõ ràng hơn. Trước đây nó giống như bạn muốn lựa chọn của bạn được nhìn thấy hoàn toàn. Thay vào đó, bạn không muốn bất kỳ mục nào hiển thị trong danh sách của bạn cả. Đúng? – Yogesh

+0

Phải. Câu hỏi của tôi giống như câu hỏi ban đầu được đăng. :) –

1

Tôi tin rằng bạn đang tìm kiếm ScrollViewer.CanContentScroll tài sản

Nếu bạn biết kích thước tối đa của mặt hàng đó trong ListView, hãy chắc chắn rằng của ListView Chiều cao là như nhau kích thước hoặc bội số của chiều cao mục.

làm việc Ví dụ:

<ListView ScrollViewer.CanContentScroll="True" 
      Height="200"> 

    <ListBoxItem Height="50" 
        Content="Test1" /> 
    <ListBoxItem Height="50" 
        Content="Test2" /> 
    <ListBoxItem Height="50" 
        Content="Test3" /> 
    <ListBoxItem Height="50" 
        Content="Test4" /> 
    <ListBoxItem Height="50" 
        Content="Test5" /> 
    <ListBoxItem Height="50" 
        Content="Test6" /> 
    <ListBoxItem Height="50" 
        Content="Test7" /> 
    <ListBoxItem Height="50" 
        Content="Test8" /> 
    <ListBoxItem Height="50" 
        Content="Test9" /> 
    <ListBoxItem Height="50" 
        Content="Test10" /> 

</ListView> 

nội dung trong một ScrollViewer có thể được cuộn về đơn vị vật lý hoặc đơn vị logic. Đơn vị vật lý là các pixel độc lập của thiết bị. Các đơn vị logic được sử dụng để cuộn các mục trong một ItemsControl. Hành vi mặc định của ScrollViewer là sử dụng các đơn vị vật lý để cuộn nội dung của nó. Tuy nhiên, trong trường hợp CanContentScroll là được đặt thành true, nội dung có thể sử dụng các đơn vị logic để cuộn. Ví dụ: , ListBox, ListView và các điều khiển khác kế thừa từ ItemsControl sử dụng đơn vị lôgic để cuộn. Nếu CanContentScroll là đúng, giá trị của các thuộc tính ExtentHeight, ScrollableHeight, ViewportHeight và VerticalOffset là số lượng mục, thay vì các đơn vị vật lý .

Nếu bạn yêu cầu cuộn vật lý thay vì cuộn logic, hãy quấn phần tử Bảng điều khiển máy chủ trong ScrollViewer và đặt thuộc tính CanContentScroll thành false. Cuộn vật lý là hành vi cuộn mặc định cho hầu hết các phần tử Bảng điều khiển.

Các vấn đề liên quan