2009-07-27 38 views
6

Tôi đang lưu trữ các điều khiển windowsforms trong cửa sổ bật lên WPF. Các sự cố bên dưới:WPF Popup và WindowsFormsHost Vấn đề

  1. Nếu tôi tạo StaysOpen = False tôi không thể tương tác với kiểm soát winform. StaysOpen to false là bắt buộc bởi vì khi nhấp vào outsidet vùng Popup, nó sẽ đóng lại.
  2. nếu tôi tạo StaysOpen = True i có thể tương tác với điều khiển winform nhưng khi tôi nhấp vào bên ngoài vùng bật lên, nó sẽ không bị đóng.
  3. Tôi đã thử đặt StaysOpen = true trong MouseEnter của cửa sổ bật lên và StaysOpen = False trong MouseLeave, nhưng MouseLeave kích hoạt khi và khi chuột trên điều khiển winform dẫn đến hành vi không mong muốn.
  4. Tôi thậm chí đã cố gắng IsMouseCaptureWithin tài sản của cửa sổ bật lên và thấy nó không hoạt động với winforms (tôi đoán nó là một lỗi trong khuôn khổ).

  5. Một vấn đề khác, tôi đã cố gắng đóng cửa sổ bật lên khi biểu mẫu gốc chính (biểu mẫu cửa sổ) bị tắt (nhấn Alt + Tab), nhưng sự kiện này (tắt) được kích hoạt ngay cả khi tôi nhập vào một trong các điều khiển trong windowshostControl trong popup.

mong muốn Hành vi:

  1. nên có thể lưu trữ và tương tác với kiểm soát Winform trong WPF popup.
  2. khi nhấp vào bên ngoài khu vực bật lên, cửa sổ bật lên sẽ đóng lại.

Đánh giá cao mọi yếu tố đầu vào.

Cảm ơn.

Trả lời

2

Tôi đã gặp nhiều vấn đề với các cửa sổ bật lên tiêu chuẩn defacto trong WPF, bởi vì thực tế chúng là một cửa sổ mới có tay cầm riêng. Điều này có nghĩa là nếu bạn kéo ứng dụng của mình quanh màn hình, cửa sổ bật lên vẫn được đặt (nó không di chuyển với cửa sổ của bạn). Nó cũng có nghĩa là cửa sổ bật lên của bạn có một số hành vi lạ và không tương tác với ứng dụng của bạn theo các cách điều khiển khác thường làm.

tôi đã tạo ra 2 lớp trang trí để giải quyết vấn đề này:

PopupDecorator.csTimeoutPopupDecorator.cs

Nó khá đơn giản để sử dụng:

  1. Thêm một tuyên bố không gian tên cho các lớp popup mới . ví dụ:

    xmlns: dday_wpf = "clr-namespace: DDay.WPF"

  2. Surround khu vực bạn muốn popup để có thể được hiển thị với các trang trí. tức là

    < dday_wpf: PopupDecorator x: Name = "popup"> < dday_wpf: PopupDecorator.Popup> ... nội dung của cửa sổ bật lên đi đây ... < /dday_wpf:PopupDecorator.Popup> ... nội dung của bảng điều khiển đi ở đây ... </dday_wpf: PopupDecorator>

Nó hoạt động khá nhiều giống hệt với một bình thường Popup từ thời điểm đó trên.

Điều này có thể không giải quyết được tất cả các sự cố của bạn, nhưng hy vọng điều đó sẽ hữu ích.

+0

Bạn có thể cung cấp cho chúng tôi một số liên kết được cập nhật không? –

+0

Không sao, tôi đã cập nhật các liên kết để trỏ đến vị trí chính xác ngay bây giờ. – Doug

0

Điều này nghe có vẻ giống như vấn đề của tôi khi khởi chạy một điều khiển biểu tượng dạng vô ích từ biểu mẫu WPF.

Xem câu hỏi của tôi Why is my WPF textbox "kinda" readonly?.

Hiện tại, dựa trên những gì Doug nói về cửa sổ bật lên là cửa sổ có tay cầm riêng, làm cho điều này có thể áp dụng.

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