【发布时间】:2012-08-22 21:40:00
【问题描述】:
问题来了: 在我的 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
那我想在调用windows的时候使用那个信息:
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 方法而是直接使用 XAMLReader.Load 时它可以工作 - 有什么想法吗?不知何故,我通过返回 XamlReader.Load 得到的窗口似乎与字典中存储的信息不同?我错过了什么吗?提前致谢!
【问题讨论】:
-
一旦窗口关闭,就不能再使用了。您需要创建一个类的 new 实例。在你的方法中射出一个相当大的漏洞。
标签: wpf vb.net xaml xamlreader