2010-01-27 41 views
10

Tôi có một cửa sổ trong ứng dụng WPF của tôi được hiển thị nhân dịp. Khi nó được hiển thị, nó sẽ bị mờ đi với một sự kết liễu và khi đóng nó bị mờ đi. Không có gì lạ mắt, chỉ là một bảng phân cảnh sửa đổi độ mờ đục. Trên thực tế, cửa sổ không bao giờ thực sự bị đóng, độ mờ chỉ mờ dần đến 0 nơi nó vẫn còn cho đến khi nó được hiển thị lại.Xác định kích thước của cửa sổ WPF SizeToContent trước khi hiển thị

Cửa sổ này là một cửa sổ thông tin và không phải lúc nào cũng hiển thị cùng một nội dung. Nó có kích thước nội dung (Chiều rộng và Chiều cao) và hoạt động tốt trong lĩnh vực đó. Người dùng chọn khu vực cơ bản của màn hình để nó được hiển thị (TopLeft, TopRight, Center, BottomLeft, BottomRight).

Trước khi cửa sổ bị mờ trong nội dung được cập nhật. Vì cửa sổ có kích thước nội dung nên cửa sổ tăng hoặc giảm kích thước. Chiều rộng và chiều cao có thể thay đổi.

Khi định vị cửa sổ, cho phép, ở góc dưới bên phải, tôi chỉ cần lấy WorkingArea của màn hình (chiều rộng và chiều cao) và sau đó trừ chiều rộng/chiều cao của cửa sổ để có được vị trí trên cùng và bên trái mà tôi nhu cầu.

Logic hoạt động, nhưng sự cố tôi gặp phải là Chiều cao và Chiều rộng của cửa sổ không trả về kích thước sau khi nội dung được cập nhật, nhưng trả về kích thước đó là lần cuối cùng được hiển thị. Tôi cho rằng điều này là do nó chưa được hiển thị với nội dung mới.

Điều này khiến tôi đau buồn vì nếu cửa sổ lớn hơn thời gian cuối cùng, nó rõ ràng sẽ mở rộng ra khỏi màn hình.

tôi đã cố gắng định vị cửa sổ trong trường hợp OnContentRendered, nhưng chỉ cháy này một lần khi Window được tạo ra, chứ không phải sau khi nội dung đã được cập nhật, khi opacity được thiết lập để 0.

Có ai có bất kỳ ý tưởng làm thế nào tôi có thể nhận được một chiều rộng và chiều cao chính xác của cửa sổ này trước khi nó bị mờ dần?

Mọi trợ giúp sẽ được đánh giá cao !!

Trả lời

5

Tôi đã tìm thấy câu trả lời cho câu hỏi của riêng mình. Sau khi cập nhật nội dung, một lời gọi đơn giản tới phương thức UpdateLayout() của cửa sổ sẽ tạo một bản cập nhật. Các cuộc gọi đến chiều rộng và chiều cao sau đó trả về các giá trị chính xác.

+1

UpdateLayout() không hoạt động. Tôi có nghĩa là bạn không thể luôn luôn nhận được ActualHeight hoặc ActualWidth ngay sau UpadteLayout() gọi – MikroDel

+2

Nếu bạn giải quyết vấn đề của riêng bạn, bạn có thể đánh dấu câu trả lời của bạn là giải pháp. –

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