簡體   English   中英

WPF - 從System.Windows.Application繼承

[英]WPF - inherit from System.Windows.Application

我想擁有自己的繼承自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文件。

謝謝

我已經嘗試使用Visual Studio 2013,但我沒有遇到任何問題。 所以,它應該是VS 2008特定的。 您是否嘗試將應用程序類重組為單獨的類庫? 也許這是一個鎖定問題。

UPDATE

我在VB.NET VS2013中做的步驟是為了實現它:

  1. 創建自定義應用程序類。 我在同一個程序集中創建它。 我的程序集名稱是:WPFVBTest
 Public Class CustomApplication Inherits System.Windows.Application End Class 
  1. 修改Application.xaml。 添加命名空間引用並將根容器更改為自定義應用程序類。
  <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類
 Class Application Inherits CustomApplication End Class 
  1. 構建應用程序。 應該發生一個錯誤,表明MyWpfExtension.vb與應用程序類名不同步。 這是一個生成的類,但不會在每次構建時重新生成。 我知道它的作弊,但這是我管理它的唯一方法。 所以我手動修改了它:
 Partial Class Application Inherits CustomApplication 

這樣,應用程序可以毫無問題地構建和運行。 我希望它可以幫助您解決您的錯誤。

我知道這不會是一個受歡迎的答案,但是......為什么不升級到Visual Studio 2015? 免費!

見鬼,他們昨天宣布VS 2017; 也是免費的。

應該說<src:MyBaseApplication.Resources>?

應用程序通常指向一個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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM