2013-07-06 2 views
4

나를 괴롭 히, GUI 프로그래밍, IronPython, WPF 및 .NET을 처음 사용합니다. 그러나 저는 파이썬에 상당히 익숙합니다. 많은 온라인 자습서를 탐색했지만 아무도 내가 직면하고있는 정확한 문제를 해결하지 못하는 것 같습니다.IronPython WPF 새 창로드

문제점 : 내 Windows.System.Application에서 새 창으로 새 WPF 창 (XAML)을 시작하는 방법을 알고 싶습니다. 기본적으로 내 앱의 도움말 메뉴에서 '정보'대화 상자를 시작하려고합니다. System.Windows.Forms.Form을 사용하여이 작업을 수행 할 수 있지만 장기적으로는 XAML 태그를 사용하여 더 복잡한 창 정렬을로드 할 수 있기를 원합니다.

현재 정보 메뉴 (mnuAboutClick)를 클릭하면 XAML 창을로드하지만 원래 주 창 (WpfMainWindow)을 대체/삭제합니다. 두 창을 모두 열어두고 싶습니다.

EDIT : 또는 xaml을 System.Windows.Forms.Form에로드 할 수있는 방법이 있습니까? 이것은 내 요구에 적합 할 것이다.

여기 내 코드의 예 :

import wpf 
from System.Windows import Application, Window 

class MyWindow(Window): 
    def __init__(self): 
     wpf.LoadComponent(self, 'WpfMainWindow.xaml') 

    def mnuAboutClick(self, sender, e): 
     print 'About Menu Click' 
     wpf.LoadComponent(self, 'WpfAboutWindow.xaml') # How to launch "About Dialog", This works, but destroys "WpfMainWindow"! 

if __name__ == '__main__': 
    Application().Run(MyWindow()) 

답변

6

당신이 Show (msdn) 또는 ShowDialog (msdn) 방법을 사용해야합니다 같은 시간에 두 개의 창을 표시합니다.

예 :

파일 "AboutWindow.xaml"

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="AboutWindow" Height="300" Width="300"> 
    <Grid> 
     <TextBlock Text="AboutWindow" /> 
    </Grid> 
</Window> 

파일 "AboutWindow.py"

import wpf 

from System.Windows import Window 

class AboutWindow(Window): 
    def __init__(selfAbout):   
     wpf.LoadComponent(selfAbout, 'AboutWindow.xaml') 

파일 "IronPythonWPF.xaml"

<Window 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="IronPythonWPF" Height="300" Width="300"> 
    <StackPanel> 
     <Menu> 
      <MenuItem Header="About" Click="MenuItem_Click" /> 
     </Menu> 
     <TextBlock Text="MainWindow" /> 
    </StackPanel> 
</Window> 

파일 "IronPythonWPF.py":

import wpf 

from System.Windows import Application, Window 
from AboutWindow import * 

class MyWindow(Window): 
    def __init__(self): 
     wpf.LoadComponent(self, 'IronPythonWPF.xaml') 

    def MenuItem_Click(self, sender, e): 
     form = AboutWindow() 
     form.Show()   

if __name__ == '__main__': 
    Application().Run(MyWindow()) 
+1

이로 인해 눈이 찢어졌습니다. 고맙습니다. 너무 아름다워. – James

+0

아시다시피, 기존 윈도우에 포함시키려는 그리드 만있는 경우에도 가능하다면? – BendEg