問題は次のとおりです。WPFアプリケーションでは、XamlReader.Loadメソッドを使用して.xamlファイルをロード/解析し、アプリケーションでウィンドウを開いていました。
ウィンドウを返す私の関数のコードフラグメント:
Dim win As New Window()
Dim myObject As Object
Dim xml As XmlReader = XmlReader.Create("mysample.xaml")
myObject = System.Windows.Markup.XamlReader.Load(xml)
win = CType(myObject, Window)
Return win
これを使用して、ユーザーが見たいと思うさまざまなウィンドウをすべて表示します。
ユーザーがwin.Closeで別のウィンドウに切り替えたら、win.Showでウィンドウを開いて閉じます。それはうまくいきます!
パフォーマンスを向上させるために、アプリケーションの開始時にすべてのXAMLReader.Loadを実行し、情報をディクショナリに格納する予定です。
Private Shared windict As Dictionary(Of String, Object)
Public Shared Sub ConvertXAMLToWindow(ByVal formName As String)
windict = New Dictionary(Of String, Object)
Dim myObject As Object
Dim xml As XmlReader = XmlReader.Create(formName)
myObject = System.Windows.Markup.XamlReader.Load(xml)
windict.Add(formName, myObject)
End Sub
次に、ウィンドウを呼び出すときにその情報を使用します。
If windict.ContainsKey(formName) Then
Dim win As New Window()
Dim myObject As Object
myObject = windict(formName)
win = CType(myObject, Window)
Return win
End If
これでうまくいきますが、win.Closeを使用してウィンドウを閉じると、ウィンドウの新しいインスタンスを作成しましたが、win.Showでウィンドウを再度開こうとするとエラーが発生します。
System.InvalidOperationExceptionウィンドウを閉じた後、可視性を設定したり、Show、ShowDialog...を呼び出したりすることはできません。
しかし、Dictionaryメソッドを使用せずにXAMLReader.Loadを直接使用する場合は機能します-何かアイデアはありますか?どういうわけか、XamlReader.Loadを返すことによって得られるウィンドウは、dictから保存された情報とは異なるように見えますか?私は何かが欠けていますか?前もって感謝します!