3

このスクリプトは、stackoverflow で見つけたスニペットに基づいて作成しましたが、実行時に次のエラーが発生します。

System.InvalidOperationException: 同じ AppDomain に複数の System.Windows.Application インスタンスを作成することはできません。

最後のステートメントが同じ AppDomain 内に新しい Application インスタンスを作成しているという事実と関係があることは知っていますが、これを修正する方法がわかりません。スクリプトは次のとおりです。

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() )

これは解決策のようですが、このコードのどの部分を修正する必要があるかわかりません。

2 つの 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> 
4

1 に答える 1

3

msdn によると、 Window.Show (モードレス バージョンの場合) またはWindow.ShowDialog (Revit API コンテキストに留まりたい場合)を使用できるはずです。

このApplication().Run( MyWindow() )行は基本的にイベント ループを設定します。これは Revit が起動時にすでに行っていることなので、先に進んでウィンドウを表示できます :)

と がないので、このソリューションを実際にテストすることはできませんAboutWindow.xamlIronPythonWPF.xamlしたがって、ここで推測しているだけです...試してみて、どうだったか教えてください。

于 2015-08-17T08:14:31.027 に答える