WPF - 从System.Windows.Application继承

时间:2009-06-02 16:49:43

标签: c# .net wpf xaml visual-studio-2008

我想拥有自己继承自System.Windows.Application的应用程序类。问题是在Application.xaml文件中,我必须像这样声明应用程序:

    <src:MyBaseApplication x:Class="MyApplication"
    xmlns:src="clr-namespace:MyApplication;assembly=WpfTestApplication"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    StartupUri="FPrincipal.xaml">    
    <Application.Resources>

    </Application.Resources>
</src:MyBaseApplication>

它在运行时运行良好,但是当我编辑项目属性时,我收到Visual Studio的项目属性编辑器的以下错误消息:

尝试加载此项目的应用程序定义文件时发生错误。无法解析文件'[...] \ Application.xaml'。请在XAML编辑器中编辑该文件以修复错误。 无法在应用程序定义文件中找到预期的根元素“Application”。

该项目是一个VB.NET项目。有人有解决方法吗?我想保留application.xaml文件。

由于

4 个答案:

答案 0 :(得分:2)

我已经尝试使用Visual Studio 2013,但我没有遇到任何问题。所以,它应该是VS 2008特定的。您是否尝试将应用程序类重组为单独的类库?也许这是一个锁定问题。

<强>更新

我在VB.NET VS2013中为实现这一目标所做的步骤:

  1. 创建自定义应用程序类。我在同一个程序集中创建它。我的程序集名称是:WPFVBTest
  2. Public Class CustomApplication
      Inherits System.Windows.Application
    
    End Class
    
    1. 修改Application.xaml。添加命名空间引用并将根容器更改为自定义应用程序类。
    2.   <self:CustomApplication x:Class="Application"
              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:self="clr-namespace:WPFVBTest"
              StartupUri="MainWindow.xaml">
          </self:CustomApplication>
      
      1. 修改文件后面的代码:Application.xaml.vb以从CustomApplication类继承
      2. Class Application
          Inherits CustomApplication
        
        End Class
        
        1. 构建应用程序。应该发生一个错误,表明MyWpfExtension.vb与应用程序类名不同步。这是一个生成的类,但不会在每次构建时重新生成。我知道它的作弊,但这是我管理它的唯一方法。所以我手动修改了它:
        2. Partial Class Application
            Inherits CustomApplication
          

          这样,应用程序可以毫无问题地构建和运行。我希望它可以帮助您解决错误。

答案 1 :(得分:2)

我知道它不会成为一个受欢迎的答案,但是......为什么不升级到Visual Studio 2015?它是免费的!

见鬼,他们昨天宣布VS 2017;也是免费的。

答案 2 :(得分:-1)

它应该说&lt; src:MyBaseApplication.Resources&gt; ?

答案 3 :(得分:-1)

应用程序通常指向一个Window并尝试从xaml文件中获取此信息;但是你的xaml文件中有一个Visual Studio无法确定的引用..

xmlns:src="clr-namespace:MyApplication;assembly=WpfTestApplication"

所以VS无法解析你的xaml文件,因此会出错...

我的建议:覆盖Window,或在Application上使用扩展名,如下所示:

public static class ApplicationExtensions
{
    public static string GetAwesomeName(this Application)
    {
        return "I am an awesome application";
    }
}

像这样使用:

Application.Current.GetAwesomeName();