【问题标题】:WPF window_loaded exception in my first WPF application我的第一个 WPF 应用程序中的 WPF window_loaded 异常
【发布时间】:2013-07-01 05:26:14
【问题描述】:

我正在学习 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 必须是树的根。不能将 Window 添加为 视觉。”}

还请解释一下为什么它与解决方案一起发生。我只是想学习 MVVM 并使用可观察集合、INotifyPropertyChanged 和模型类,并且我正在以硬编码的方式生成该对象的数据。

注意:

我怀疑这是由于 clr-namespace 造成的。

首先,我想知道,为什么如果我输入 clr,intellisense 不会把我带到 clr ?相反,它只需要我在命名空间列表中的第一个 http 。其次,Silverlight Video 使用了项目的命名空间,而我使用了 View 的命名空间。因为,当我使用项目的命名空间时,它给了我一个错误,说“视图”没有找到。我哪里出错了:(

(或):

是因为我试图将一个新的 Window.xaml 页面插入另一个 window.xaml 页面吗?与 Silverlight 视频不同,它确实将 UserControl 插入到页面中。

MainWindow 变成 MainWindow 这里有问题吗? 如果我在 MainWindow 中使用 UserControl 会得到解决吗?意思是,我们没有窗口到窗口?

【问题讨论】:

  • 是的,这是正确的,当我在 View 中使用“UserControl.xaml”而不是“Window.xaml”时,它的效果令我惊讶。但是如何以及为什么?一般来说,查看文件夹应该在 WPF 中为各种屏幕提供 Window.xaml 窗口?不仅是用户控制。为什么在早期情况下会引发错误:(

标签: c# .net wpf mvvm wpf-controls


【解决方案1】:

你不能在另一个窗口中拥有一个窗口! Window 应该是 xaml 的根元素,您可以在其中添加其他元素。例如网格。我的建议是找一些 WPF 教程和书籍(不是 silverlight)作为入门,因为 WPF 更强大,而且在很多方面都不同。

【讨论】:

  • 嗨,淡水河谷,非常感谢。我是这方面的初学者。但我怀疑淡水河谷。在 MVVM 项目结构中,在 View 文件夹下,我们将只拥有所有 UserControl.xaml 吗?而不是 Window.Xaml ?正如你所看到的,当我与 Winforms 进行比较时,我们在 MVP 的“View”文件夹下为不同的屏幕添加了很多 winforms。所以,这意味着,在 MVVM 中,View Folder 根本不包含不同的窗口:0 如果是这样的话,我会很震惊。
  • 你可以有很多用户控件,也可以有很多窗口。我认为您对 Silverlight 感到困惑。 Silverlight 中没有窗口!因为它是作为插件设计的,所以window其实就是网页。获取一些 WPF 书籍,不要理会 Silverlight,除非您想做 Web 编程。祝你好运:)
  • 谢谢淡水河谷。我现在不想去 Silverlight。我明天有一个 WPF 面试 :( 我刚开始 :P 好的,我会学习一些关于 WPF 的好书。你对 WPF 初学者有什么建议吗?最好,我需要外行解释,它应该强制执行 MVVM 风格. 虽然几年前我在某种程度上习惯了使用blend,wpf,但现在我又回到了WPF。
  • 另外,如果你能给我指出好的视频教程和好的 WPF 电子书链接,那就太好了。另外,当前使用的是哪个版本的 WPF? WPF 4 ?
  • 我使用了 Matthew MacDonald 的“Pro WPF in C# 2010”。它适用于 .NET 4。它不包括 MVVM,您必须自己搜索。现在有.NET 4.5,但是WPF框架差别不大。对于教程,谷歌具体问题。如果您想学习和使用 WPF,您需要自己进行大量研究。
【解决方案2】:

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>

这会将您的用户控件导入窗口。/

希望这会对你有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 2013-09-15
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多