2011-05-26 16 views

Odpowiedz

7

Gdybym zrozumiał swoje pytanie poprawnie powinieneś być w stanie osiągnąć to, co chcesz, za pomocą czegoś takiego:

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

To okaże MainForm okno podrzędne określonego podejmowania okna zawsze pojawia się nad nim. Używam ShowDialog w przykładzie, ale powinno to również działać dla Show. Jest to specyficzne dla Windows Forms.

W WPF można spróbować wykonać następujące czynności:

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

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

I szybko próbował tego po pokazując okno WPF i wydawało się działać zgodnie z oczekiwaniami, ale WPF wiedza nie jest taka wielka.

+0

OK, spróbuję tego, ale ... jest to niemożliwe dla klasy Window? Mam już kod oparty na Window z XAML. – Svisstack

+0

Założono, że Windows Forms, więc nie będzie to miało zastosowania do okna WPF. –

+0

Zaktualizowałem odpowiedź możliwym rozwiązaniem w WPF, ale nie mam żadnych gwarancji ... :) –

3

Wierzę, że uchwyt będzie tylko do odczytu; dlatego właściwość .Parent jest tylko do odczytu. Jednak właściwość .Owner ma program pobierający i ustawiający (ref. MSDN) ... jednak musi istnieć odwołanie do okna nadrzędnego.

Bez dodatkowych informacji nie będę w stanie zapewnić znacznie więcej.

Jeśli Twoim rodzicielskim kandydatem jest niezarządzane okno, sprawdź to link.

Powiązane problemy