我正在学习WPF及其第一个MVVM应用程序。我正在看一个使用Silverlight应用程序演示MVVM的视频。但是,我正在为WPF模仿它。在Silverlight中,视频演示者在UserControl XAML标记中创建一个事件,即UserControl_Loaded,该事件是成功的。
但是,我在MainWindow.xaml的xaml文件的Window根元素中创建一个Window_Loaded
我收到此错误:(请帮助我。此事件“Window_Loaded”仅在第5行。
例外:
'为类型集合添加值 'System.Windows.Controls.UIElementCollection'引发了一个异常。 行号“5”和行位置“28”。
内部例外:
{“窗口必须是树的根。不能将Window添加为子窗口 视觉。“}
还请解释为什么它与解决方案一起发生。我只是想学习MVVM并使用可观察的集合,INotifyPropertyChanged和一个模型类,我正在以硬编码的方式生成这个对象的数据。
注意:
我怀疑这是由clr-namespace引起的。
首先,我想知道,为什么如果我输入clr,intellisense不会把我带到clr?相反,它只需要我在命名空间列表的序列中第一个http。其次,Silverlight Video使用了项目的命名空间,但是,我使用了View的命名空间。因为,当我使用项目的命名空间时,它给出了错误,说“找不到”。我出错的地方:(
是否是由于我试图插入另一个window.xaml页面的新Window.xaml页面?与Silverlight视频不同,它将UserControl插入到页面中。
MainWindow进入MainWindow是个问题吗? 如果我将UserControl用于MainWindow,它会被解决吗?这意味着,我们没有窗户进入窗户?答案 0 :(得分:4)
你不能在另一个窗口内有一个窗口!窗口应该是xaml的根元素,您可以在其中添加其他元素。例如Grid。我的建议是找到一些WPF教程和书籍(不是silverlight),因为WPF更强大,而且在很多方面都不同。
答案 1 :(得分:1)
Window.xaml:
<Window x:Class="WpfMvvmApplication1.Views.Login"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:View="clr-namespace:WpfMvvmApplication1.Views">
<Grid>
<View:UserControl/>
</Grid>
</Window>
这会将您的usercontrol导入窗口./
希望这会对你有所帮助。