WPF - наследовать от System.Windows.Application - PullRequest
5 голосов
/ 02 июня 2009

Я хотел бы иметь свой собственный класс приложения, который наследуется от 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, чтобы исправить ошибку. Не удалось найти ожидаемый корневой элемент «Приложение» в файле определения приложения.

Проект является проектом VB.NET. У кого-нибудь есть обходной путь? Я хочу сохранить файл application.xaml.

Спасибо

Ответы [ 4 ]

2 голосов
/ 17 ноября 2016

Я знаю, что этот ответ не будет популярным, но ... почему бы вам просто не перейти на Visual Studio 2015? Это бесплатно!

Черт, они объявили VS 2017 только вчера; также бесплатно.

2 голосов
/ 16 ноября 2016

Я пробовал это с 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

Таким образом, приложение собирается и работает без проблем. Я надеюсь, что это поможет вам решить вашу ошибку.

0 голосов
/ 05 июня 2009

Приложения обычно указывают на окно и пытаются получить эту информацию из файла xaml; но в вашем файле xaml есть ссылка, которую Visual Studio не может определить ..

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

То есть VS не может проанализировать ваш файл xaml и, таким образом, выдает эту ошибку ...

Мое предложение: переопределить окно или использовать расширения в приложении, например так:

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

Используйте это так:

Application.Current.GetAwesomeName();
0 голосов
/ 02 июня 2009

Должно ли это сказать ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...