这是问题所在:在我的 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 再次打开它时出现错误,尽管我创建了一个新的 Window 实例?
System.InvalidOperationException 在窗口关闭后无法设置可见性或调用 Show、ShowDialog...。
但是当我不使用 Dictionary Method 而是直接使用 XAMLReader.Load 时它可以工作 - 有什么想法吗?不知何故,我通过返回 XamlReader.Load 得到的窗口似乎与字典中存储的信息不同?我错过了什么吗?提前致谢!