Như hầu hết các nhà phát triển WPF biết, thiết lập ScrollViewer.CanContentScroll
để false
sẽ vô hiệu hóa ảo hóa; nhưng tôi muốn biết nó hoạt động như thế nào, bởi vì tôi cố gắng kích hoạt ảo hóa trong khi thiết lập ScrollViewer.CanContentScroll
thành false
.lý do tại sao thiết lập ScrollViewer.CanContentScroll để ảo vô hiệu hóa ảo hóa
Trả lời
"ScrollViewer hiện cho phép hai chế độ cuộn: di chuyển từng điểm ảnh mượt mà (CanContentScroll = false) hoặc cuộn từng mục riêng biệt (CanContentScroll = true). Hiện tại WPF chỉ hỗ trợ ảo hóa giao diện người dùng khi cuộn theo mục Di chuyển dựa trên pixel cũng được gọi là cuộn "vật lý" và cuộn theo mục cũng được gọi là "cuộn theo lô-gic". "
Ảo hóa yêu cầu cuộn theo mục nên có thể theo dõi đơn vị logic (mục) hiện đang xem ... Đặt ScrollViewer thành cuộn dựa trên pixel không phải là khái niệm đơn vị logic mà chỉ là pixel !! !
Tôi thường được hỏi nếu có một cách để làm việc xung quanh hạn chế này. Vâng, bất cứ điều gì là có thể, nhưng không có dễ dàng giải quyết. Bạn sẽ phải triển khai lại các phần quan trọng của logic ảo hóa hiện tại để kết hợp cuộn dựa trên pixel với ảo hóa giao diện người dùng. Bạn cũng sẽ phải giải quyết một số vấn đề thú vị đi kèm với nó. Ví dụ, làm thế nào để bạn tính toán kích thước của ngón tay cái khi các mục chứa có chiều cao khác nhau? (Hãy nhớ rằng bạn không biết chiều cao của các thùng chứa ảo - bạn chỉ biết chiều cao của các vùng chứa hiện đang được hiển thị). Bạn có thể giả sử mức trung bình dựa trên chiều cao bạn biết hoặc bạn có thể giữ danh sách bằng chiều cao mục khi các mục được đưa vào bộ nhớ (điều này sẽ làm tăng độ chính xác của kích thước ngón tay cái khi người dùng tương tác với bộ điều khiển). Bạn cũng có thể quyết định rằng cuộn dựa trên pixel chỉ hoạt động với các mục có cùng chiều cao - điều này sẽ đơn giản hóa giải pháp. Vì vậy, có, bạn có thể đưa ra một giải pháp để làm việc xung quanh giới hạn này, nhưng nó không phải là tầm thường.