Я написал этот скрипт на основе фрагментов, которые я нашел здесь, в stackoverflow, но получаю эту ошибку во время выполнения:
System.InvalidOperationException: невозможно создать более одного экземпляра System.Windows.Application в одном и том же AppDomain.
Я знаю, что это как-то связано с тем фактом, что последний оператор создает новый экземпляр приложения в том же AppDomain, но я не знаю, как это исправить. Вот сценарий:
clr.AddReference('PresentationCore')
clr.AddReference("PresentationFramework")
clr.AddReference('Microsoft.Dynamic')
clr.AddReference('Microsoft.Scripting')
clr.AddReference('System')
clr.AddReference('IronPython')
clr.AddReference('IronPython.Modules')
clr.AddReference('IronPython.Wpf')
from System.Windows import Application, Window
from IronPython.Modules import Wpf as wpf
class AboutWindow(Window):
def __init__(selfAbout):
wpf.LoadComponent( selfAbout, os.path.join( folder, 'AboutWindow.xaml' ))
class MyWindow(Window):
def __init__(self):
wpf.LoadComponent( self, os.path.join( folder, 'IronPythonWPF.xaml' ))
def MenuItem_Click(self, sender, e):
form = AboutWindow()
form.ShowDialog()
if __name__ == '__main__':
Application().Run( MyWindow() )
Это кажется решением, но не знаю, что части этого кода, которые мне нужно исправить.
Вот содержимое двух файлов XAML:
__WIP__wpfTest__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>
__WIP__wpfTest__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>