2011-05-02 50 views
6

trong ứng dụng WPF của tôi đôi khi tôi cần phải tạo một cửa sổ trợ giúp nhỏ và tôi tạo ra thể hiện của cửa sổ lần đầu tiên tôi cần nó.Điều gì sẽ xảy ra với cửa sổ WPF sau khi đóng?

if (mesareaderThreadQueWin == null) 
{ 
    mesareaderThreadQueWin = new MesaReaderThreadQueWindow();  
} 

mesareaderThreadQueWin.Show(); 

Điều này hoạt động hoàn hảo cho đến nay. Nhưng nếu tôi đóng cửa sổ và gọi lại mã chương trình, sự cố sẽ báo cho tôi biết tôi không thể làm hiển thị sau khi cửa sổ đã đóng.

Tôi tự hỏi một chút chính xác những gì đang xảy ra ở đây. Cửa sổ không phải là null nếu không mã sẽ chỉ tạo một phiên bản mới nhưng vì tôi đã hiển thị cửa sổ, có vẻ như tôi không thể làm như vậy lần nữa. Vì vậy, cửa sổ phải ở trong một số loại ở giữa trạng thái. Không thể hiển thị nhưng không hiển thị null.

Tôi có thể phát hiện trạng thái này không? Có cách nào để sử dụng lại cửa sổ này một lần nữa, sau đó không đóng cửa sổ và sử dụng ẩn thay thế?

+2

Bạn có thể sử dụng các thành viên Hide() thay vào đó, nó sẽ lưu các ví dụ cho việc sử dụng tiếp theo của bạn. –

Trả lời

4

Tôi có thể phát hiện trạng thái này không?

Theo như tôi biết, không có cách nào để truy cập vào trạng thái này

của nó Có cách nào để tái sử dụng cửa sổ này lại khác sau đó không đóng cửa sổ ở tất cả và sử dụng hide để thay thế?

Vâng, xử lý các sự kiện Closing trong cửa sổ hộp thoại, hoặc ghi đè lên OnClosing phương pháp:

protected override void OnClosing(CancelEventArgs e) 
{ 
    e.Cancel = true; 
    this.Hide(); 
} 
1

Bạn có thể xử lý các sự kiện Closing, hủy bỏ nó, sau đó ẩn các cửa sổ:

window.Closing += delegate(object sender, CancelEventArgs e) 
{ 
    e.Cancel = true; 
    window.Hide(); 
}; 

Điều này đảm bảo Window không bao giờ đóng cửa và cho phép bạn gọi Show() bất kỳ số lần.

Có thể không cần thiết như đã nêu ở trên, nhưng bạn có thể phát hiện khi nào Window của bạn bị đóng bằng cách đính kèm sự kiện Closed và đặt cờ ở đó. Tức là, duy trì biến số isClosed của riêng bạn.

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