2011-05-26 50 views

Trả lời

7

Nếu tôi hiểu câu hỏi của bạn một cách chính xác bạn sẽ có thể đạt được những gì bạn muốn bằng cách sử dụng một cái gì đó như thế này:

class Win32Window : IWin32Window 
{ 
    IntPtr handle; 

    public Win32Window(IntPtr handle) { this.handle = handle; } 

    public IntPtr Handle 
    { 
     get { return this.handle; } 
    } 
} 

static void Main() 
{ 
    IntPtr targetParent = // Get handle to the parent window 

    new MainForm().ShowDialog(new Win32Window(targetParent)); 
} 

này sẽ biến MainForm một cửa sổ con của việc ra cửa sổ chỉ định nó luôn xuất hiện phía trên nó. Tôi sử dụng ShowDialog trong ví dụ này, nhưng điều này cũng sẽ hoạt động cho Show. Điều này là dành riêng cho Windows Forms.

Trong WPF, bạn có thể thử như sau:

var helper = new WindowInteropHelper(/* your Window instance */); 

helper.Owner = // Set with handle for the parent 

tôi nhanh chóng cố gắng này sau khi thấy cửa sổ WPF và nó dường như làm việc như mong đợi, nhưng WPF kiến ​​thức mà không phải là tuyệt vời.

+0

Ok tôi sẽ thử điều này, nhưng .. điều này là không thể đối với lớp Window? Tôi đã có mã dựa trên Window với XAML. – Svisstack

+0

Tôi giả định Windows Forms, vì vậy điều này sẽ không được áp dụng cho một cửa sổ WPF. –

+0

Tôi đã cập nhật câu trả lời với một giải pháp có thể có trong WPF, nhưng tôi không thực hiện bất kỳ đảm bảo nào ... :) –

3

Tôi tin rằng Trình xử lý sẽ là chỉ đọc; do đó, thuộc tính .Parent là chỉ đọc. Tuy nhiên, thuộc tính .Owner có trình khởi động và trình chuyển đổi (ref. MSDN) ... tuy nhiên, bạn phải có tham chiếu đến cửa sổ Chính.

Nếu không có thêm thông tin, tôi sẽ không thể cung cấp nhiều hơn thế nữa.

Nếu ứng viên gốc của bạn là không được quản lý Cửa sổ, hãy kiểm tra link này.

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