2011-08-26 33 views
12

Tôi có một cửa sổ WPF mà tôi không đóng. Thay vào đó tôi làm Hide() và Show() nó. Bây giờ, khi tôi doubleclick trong MainWindow của tôi trong một Grid trên một Record, sẽ Trigger to Show() cửa sổ, cửa sổ sẽ luôn luôn được hiển thị phía sau MainWindow. Tôi đã thử các thẻ địa chỉ mạng, nhưng không thành công:WPF - Đưa cửa sổ ra trước

view.Show(); 
view.Activate(); 
view.Topmost = true; 
view.Topmost = false; 
view.Focus();  

Có một cách khác mà tôi có thể sử dụng để mang lại các absolut cửa sổ phía trước? Tôi không thể đặt MainWindow làm Chủ sở hữu.

+1

Bạn sẽ phải xây dựng trên "Tôi không thể đặt MainWindow là Chủ sở hữu". – vcsjones

+0

Tôi sẽ không đặt MainWindow làm Chủ sở hữu là chế độ xem của tôi vì không có mối quan hệ nào giữa Windows. Và tôi sẽ có thể mở nhiều cửa sổ này. – BennoDual

+2

có thể trùng lặp của [Đưa cửa sổ lên phía trước trong WPF] (http://stackoverflow.com/questions/257587/bring-a-window-to-the-front-in-wpf) – CodeNaked

Trả lời

27

Window.Activate là cách để đi (Nếu bạn không muốn đặt thành chủ sở hữu). Nếu điều này không hoạt động (như bạn mô tả), có một lỗi tại một vị trí khác. Có lẽ MainWindow của bạn có TopMost được đặt thành true? Hoặc bạn có một cuộc gọi hoãn lại tập trung cửa sổ chính của bạn hoặc một điều khiển bên trong?

Gọi ShowDialog() như được đề xuất trong câu trả lời khác không phải là một tùy chọn trừ khi bạn muốn toàn bộ ứng dụng bị chặn cho đến khi cửa sổ mở phương thức đóng.

Có một error trong Win32-Api cũng ảnh hưởng đến quản lý cửa sổ nếu WPF, nhưng mô tả sự cố của bạn không giống như thế này.

Ngoài ra ở đây một hack, nhưng tôi hy vọng rằng bạn không cần nó:

Dispatcher.BeginInvoke(new Action(delegate {  
     view.Activate(); 
     }), System.Windows.Threading.DispatcherPriority.ContextIdle, null); 
+0

Cảm ơn, chỉ giải pháp này giải quyết được vấn đề mô tả cho tôi. – Sevenate

4

ShowDialog thay vì Hiển thị sẽ cho phép cửa sổ luôn được hiển thị ở trên cùng.

+0

+1 Có lẽ là câu trả lời! – CharithJ

+3

Tôi không nghĩ rằng đây là câu trả lời, trừ khi OP muốn chặn các cửa sổ khác miễn là cửa sổ mở bổ sung mở. Đối với tôi, câu hỏi không giống như thế này. – HCL

+0

Anh ấy muốn đưa nó lên hàng đầu, không làm cho nó trở thành mô hình. – Oli

2
myWindow.WindowState = WindowState.Normal; 

Đó làm việc cho tôi.

1

Tôi đã gặp sự cố tương tự - tôi đã hiển thị cửa sổ có Chủ sở hữu được đặt thành NULL từ sự kiện MouseDoubleClick. Tôi nhận ra (cuối cùng) mà tôi cần thiết để thiết lập:

e.Handled = true

trước mã sự kiện của tôi hoàn thành. Các tài liệu Microsoft sau đây phác thảo mà bạn có thể muốn đánh dấu một sự kiện như xử lý khi nó đáp ứng trong một "cách đáng kể và tương đối hoàn chỉnh":

http://msdn.microsoft.com/en-us/library/ms747183.aspx

Đây là chủ quan, nhưng trong trường hợp của tôi nó đã được ngăn chặn cửa sổ Tôi vừa mới mở được hiển thị cho người dùng.

1

Tôi đã gặp một vấn đề tương tự và tìm thấy giải pháp bằng cách sử dụng kết hợp các câu trả lời khác. Một khi cửa sổ bị giấu tôi đặt nó ở mặt trước với đoạn mã sau:

view.WindowState = WindowState.Normal; 
    view.Activate(); 

Lưu ý: Nếu cửa sổ được tối đa trước khi ẩn, mã mà sẽ làm cho nó trở lại như tối đa

+0

Điều này làm việc cho tôi, và chỉ cần kích hoạt thẳng thì không. Cảm ơn rất nhiều vì gợi ý! – ravuya

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