2011-05-26 217 views

回答

7

如果我明白你的問題正確,您應該能夠實現你想要的使用是這樣的:

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)); 
} 

這將打開MainForm指定窗口製作的子窗口它總是出現在它之上。在示例中我使用ShowDialog,但這也應該適用於Show。這是Windows窗體特有的。

在WPF中,你可以嘗試以下方法:

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

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

我很快就顯示WPF窗口後嘗試這樣做,它似乎按預期運行,但WPF知識不是很大。

+0

好吧,我會嘗試這個,但..這是不可能的窗口類?我已經使用XAML基於Window編碼。 – Svisstack 2011-05-26 22:46:39

+0

我假定Windows窗體,所以這不適用於WPF窗口。 – 2011-05-26 22:53:04

+0

我更新了WPF中可能的解決方案的答案,但我不作任何保證...... :) – 2011-05-26 22:59:52

3

我相信Handle是隻讀的;因此,.Parent屬性是隻讀的。但是,.Owner屬性有一個getter和setter(ref. MSDN)...但是,您必須具有對父窗口的引用。

沒有更多信息,我將無法提供更多的信息。

如果您的家長候選人是非託管窗口,請檢查此link