2009-09-10 50 views
7

Tôi có một vài listboxes trên Windows WPF, với Height="Auto" Width="Auto" bộ về hình thứcWPF bố trí trên một cửa sổ

Các kích thước hình thức hoàn hảo về độ phân giải khác nhau, nhưng vấn đề là khi tôi nhấn vào nút maximize một dày "Đen L" hiển thị khi biểu mẫu đổi kích thước. Tôi đã thấy điều này trên một vài ứng dụng WPF, nhưng không phải giải quyết vấn đề cho đến bây giờ.

Có cách nào để DoubleBuffer cửa sổ, hoặc gọi SuspendLayout() trong WPF trong khi các điều khiển trên biểu mẫu được thay đổi kích cỡ? Làm thế nào tôi có thể loại bỏ L đen xấu xí này?

+1

Bạn có thể thêm ảnh chụp màn hình của tạo tác trực quan mà bạn đang xem không? Tôi không thể hình dung nó. –

+0

Tôi đã cố gắng in màn hình nhưng cửa sổ không bắt được vấn đề nhưng tôi đã thực hiện một mô hình nhanh chóng trong sơn. http://img16.imageshack.us/img16/403/25229633.png Sự cố chỉ xảy ra khi hộp danh sách có dữ liệu trong đó. Nếu tôi không thêm bất kỳ dữ liệu nào thì vấn đề sẽ không xảy ra. Nó gần như là nếu các hộp danh sách đang tải lại dữ liệu khi các cửa sổ được thay đổi kích thước – Vault

+0

Trông trùng lặp với câu hỏi này: http: // stackoverflow.com/questions/555326/how-can-i-make-resizing-wpf-windows-less-laggy –

Trả lời

3

Trích dẫn một trong những gần đây Hanselminutes:

Ian Griffiths: ... Có những win32 cue mà là một win32 nhắn loop bình thường, và WPF thông điệp hồ tắt về điều đó và đặt chúng trên riêng của nó và sau đó xử lý nó theo thời gian ngọt ngào của riêng mình, một phần vì nó muốn có thể sắp xếp lại các sự kiện khi chúng đi vào. Ưu tiên nhất định là những thứ ở trên xử lý đầu vào, cho ví dụ . con đường, là lý do tại sao bạn sẽ có được repaint hơi kỳ lạ xử lý trên thay đổi kích thước các ứng dụng WPF, bạn có thể nhận thấy bạn nhận được một chút chút khoảng trống xuất hiện tạm thời khi bạn thay đổi kích thước cửa sổ đó là vì nó thừa nhận sự kiện thay đổi kích thước trước khi nó thực sự thực sự làm bất cứ điều gì với nó và sau đó các loại sơn xảy ra hơi không đồng bộ với những gì bình thường ở đó. Vì vậy, có là hàng đợi thư win32 nhưng không phải là hàng đợi thông báo chính trong WPF và đó là tất cả các loại triển khai chi tiết điều phối viên cố gắng ẩn số càng nhiều càng tốt.

Dường như có liên quan đến vấn đề của bạn, mặc dù tôi không biết giải pháp hoàn chỉnh. Có thể, bạn nên cố gắng thay đổi một số ưu tiên của Điều phối viên?

+0

cảm ơn đề xuất, tôi sẽ thử rằng – Vault

0

Vault, tôi nghĩ điều này có thể liên quan đến ảo hóa giao diện người dùng mà hộp danh sách thực hiện. Ảo hóa cho phép hộp danh sách chỉ tải những phần tử giao diện người dùng đang được hiển thị. Listbox thực hiện với sự trợ giúp của VirtualizingStackPanel như là ItemsPanelTemplate của nó.

Vì vậy, dự đoán của tôi có vẻ là ... tối đa hóa cửa sổ sẽ đẩy hộp danh sách để tạo ra nhiều phần tử giao diện người dùng hơn và độ trễ sẽ có màu đen 'L'.

Bạn có thể xóa ảo hóa và kiểm tra xem liệu 'L' màu đen vẫn xuất hiện. Nhân tiện, ảo hóa thực tế là một điều "tốt", và tắt nó là một ý tưởng tồi.

+1

Xóa ảo hóa đã không hoạt động. Thành thật mà nói, tôi đã nhìn thấy vấn đề này trong một vài ứng dụng WPF, và các nhà phát triển luôn đẩy vấn đề lên phía sau hàng đợi vì nó được xem là ưu tiên thấp – Vault

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