2011-09-29 46 views
8

WPF thực sự khiến tôi thoát khỏi sự lo lắng của tôi ở đây. Tôi đã cấu hình một popup với một số nội dung phức tạp (lưới, nút, vv ..). Tôi thiết lập thuộc tính StaysOpen của nó thành False và IsOpen thành True trên một sự kiện xem trước của hộp văn bản MouseDown.Popup Không bao giờ đóng

Điều là nó mở ra nhưng không bao giờ đóng khi nhấp vào bất kỳ nơi nào bên ngoài cửa sổ.

Mọi đề xuất?

Cảm ơn!

UPDATE:

sổ popup của tôi có các nút ở bên trong. Khi tôi nhấp vào một trong số đó, cửa sổ bật lên sẽ đóng lại khi tôi nhấp vào bên ngoài. Có một số công cụ kỳ lạ xảy ra với các sự kiện định tuyến không?

+0

bạn đã thử đóng thủ công như bạn có nút đóng không? hoặc ánh xạ một khóa như phím ESC để thoát khỏi cửa sổ bật lên. –

+0

Tôi có thể làm như vậy .. nhưng tôi cần nó tự động đóng khi mất tiêu điểm. –

+0

Bạn có thể thêm XAML đơn giản để chứng minh vấn đề này (có thể giúp bạn gỡ lỗi không?)? –

Trả lời

4

Có vẻ như cửa sổ bật lên sẽ không đóng nếu được mở bởi bất kỳ sự kiện kiểm soát nào khác. Tôi chỉ gắn kết thuộc tính IsOpen với thuộc tính IsChecked của ToggleButton để mô phỏng một combobox.

Cảm ơn mọi câu trả lời của bạn.

+0

Tôi đồng ý, điều tương tự cũng hiệu quả với tôi. Strange hành vi, nhưng làm việc. Đã tạo một ràng buộc cho IsOpenProperty trong mã vào một nút chuyển đổi thuộc tính IsChecked và nó hoạt động tốt. Tôi sẽ lấy nó :) – TravisWhidden

0

Tôi đặt IsOpen trên hộp văn bản Sự kiện xem trước của MouseDown.

Đặt nó thành cái gì? Và TextBox được lưu trữ ở đâu?

Tôi chỉ có thể đoán được thông tin có sẵn, nhưng tôi muốn nói khi bạn nhấp vào bên ngoài Popup, trình xử lý sự kiện của bạn sẽ kích hoạt và mở lại.

+0

Hộp văn bản nằm bên trong một điều khiển người dùng được sử dụng trong Cửa sổ. Trong điều khiển người dùng, tôi thiết lập IsOpen = true bất cứ khi nào hộp văn bản được nhấn. Khi cửa sổ bật lên mất tiêu điểm, nó sẽ không bao giờ đóng lại. –

0

Bạn có thể sử dụng sự kiện LostFocus của PopUp. Nếu tiêu điểm không nằm trong cửa sổ bật lên, hãy đặt số IsOpen thành sai để đóng.

+0

Nó không làm gì cả. Nếu tôi khởi động cửa sổ với thuộc tính bật lên IsOpen, nó sẽ hoạt động bình thường. Nếu tôi đặt nó vào hộp văn bản PreviewMouseButtonDown sự kiện nó không hoạt động. –

0

Tôi cũng gặp sự cố này, ngoại trừ sự kiện PreviewMouseButtonUp của Nút. Giả định rằng có một số lỗi với Popups và cố gắng để mở chúng trong các sự kiện Tunneling là chính xác và dẫn tôi xuống con đường để sửa chữa của tôi (đó là một chút chung chung hơn).

Tôi cần giải quyết điều này (điều khiển máy chủ là chung/có thể là một số loại điều khiển) bằng cách nghe sự kiện bubbling thay vì sự kiện đường hầm, cụ thể với phương pháp AddHandler(RoutedEvent,Delegate,Boolean) để nắm bắt các sự kiện được xử lý.

TỪ vấn đề nằm ở đâu đó khi chuyển từ đường hầm sang sủi bọt.

0

Tôi sử dụng mã phía sau để khởi chạy cửa sổ bật lên và tôi thấy rằng nó không bị đóng nếu chạy đồng bộ hóa từ hành động giao diện người dùng khác như sự kiện chuột. Để giải quyết vấn đề này, tôi chạy nó không đồng bộ:

public static void ShowPopupMessage(string message) 
    { 
     DispatcherHelper.UIDispatcher.BeginInvoke(new Action(() => 
     { 
      var popup = new Popup 
      { 
       Child = new AutoHideMessage(message), 
       StaysOpen = false, 
       IsOpen = true 
      }; 
     })); 
    } 
Các vấn đề liên quan