2010-02-20 46 views
18

Tôi đang sử dụng WPF DataGrid, chỉ sửa đổi Tôi có tại chỗ là:Cuộn dễ dàng cho WPF DataGrid

<toolkit:DataGridTextColumn.ElementStyle> 
     <Style TargetType="TextBlock"> 
     <Setter Property="TextWrapping" Value="Wrap"/> 
     </Style> 
    </toolkit:DataGridTextColumn.ElementStyle> 

Tôi có sửa đổi này vì vậy nếu các nội dung di động dài hơn, họ căng chiều cao dòng, không có văn bản là ẩn. Vấn đề là với hành vi di chuyển của DataGrid - nó nhảy toàn bộ dòng khi cuộn, mà không hoạt động tốt chút nào nếu hàng cao hơn một dòng - thanh cuộn bị giật khi di chuyển, v.v.

Có cách nào để làm cho WPF DataGrid không cuộn "trơn tru" và không theo từng dòng?

Cảm ơn

Trả lời

29

Các DataGrid có tài sản gắn liền, ScrollViewer.CanContentScroll, quản lý hành vi này. Để có được thao tác cuộn mượt mà, bạn cần đặt nó thành False.

+4

tài sản Đó là trong không gian tên ScrollViewer: 'ScrollViewer.CanContentScroll = "False"' – cpalmer

+1

Cố gắng này cho 2500 dòng x 20 cột DataTable giáp DataGrid và nhận chương trình không đáp ứng, về tiêu thụ bộ nhớ 1GB và sau vài giây tôi dừng lại chờ tải xong. –

+0

@ JānisGruzis Đó là một vấn đề khác. Điều này nói về việc di chuyển dữ liệu một hàng một lúc thay vì thông suốt. Đối với vấn đề bạn đang nói về nó có vẻ như bạn có toàn bộ lưới hiển thị trong một ScrollViewer hoặc Bảng điều khiển và bạn đang di chuyển đó để DataGrid điều toàn bộ điều đang hiển thị. Bạn cần sử dụng trình xem cuộn nội bộ của Grid. –

23

Tôi chưa chơi với DataGrid một cách rõ ràng, nhưng thực tế là sử dụng ScrollViewer.CanContentScroll=False hoán đổi mặc định ItemsPanelTemplate sử dụng số VirtualizedStackPanel với số thường là StackPanel. Nó sẽ cuộn trơn tru, nhưng nó sẽ hiển thị mọi mục ngay cả khi nó không hiển thị.

Điều này hoàn toàn có thể tiêu diệt hiệu suất nếu bạn đang xử lý một cây hình ảnh phức tạp hoặc các tập dữ liệu lớn.

+3

Câu trả lời này chính xác hơn, vì nó cảnh báo về nguy cơ vô hiệu hoá ScrollViewer.CanContentScroll và VirtualizedStackPanel. –

-1
<DataGrid Grid.Row="1" 
       CanUserAddRows="False" 
       CanUserDeleteRows="False" 
       CanUserReorderColumns="False" 
       CanUserSortColumns="False" 
       SelectionUnit="FullRow" 
       HeadersVisibility="None" 
       Name="grd" 
       GridLinesVisibility="None" 
       ItemsSource="{Binding}" 
       AutoGenerateColumns="False" 
       ScrollViewer.CanContentScroll="False"> 
</DataGrid> 
Các vấn đề liên quan