Как переместить App.xaml и не сломать конструктор? - PullRequest
1 голос
/ 31 марта 2011

У меня есть проект WPF и некоторые ресурсы, определенные в App.xaml, которые используются в других файлах. Когда я пытаюсь переместить App.xaml в подкаталог, дизайнер больше не может найти эти ресурсы. Мой проект все еще компилируется, так как я использую событие Startup вместо StartupUri. Как сказать дизайнеру, где искать ресурсы? Как он узнает, где они находятся, когда App.xaml находится в корне проекта?

Обновление: Файлы проекта:

App.xaml:

<Application x:Class="WpfApplication1.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             Startup="startup">
    <Application.Resources>
        <SolidColorBrush Color="LightGray" x:Key="brush" />
    </Application.Resources>
</Application>

App.xaml.cs

namespace WpfApplication1
{
    public partial class App : System.Windows.Application
    {
        private void startup(object sender, System.Windows.StartupEventArgs e)
        {
            new MainWindow().Show();
        }
    }
}

MainWindow.xaml:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Height="300" Width="300" Background="{StaticResource brush}" />

MainWindow.xaml.cs

namespace WpfApplication1
{
    public partial class MainWindow : System.Windows.Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}

Обновление 2: Загруженное архивированное решение в http://zalil.ru/30771604 (загрузка начнется автоматически)

Зеркало: http://www.speedyshare.com/files/27697250/WpfApplication1.zip

Ответы [ 2 ]

3 голосов
/ 31 марта 2011

1 . Переместите ваш App.xaml в нужное вам место

App.xaml Moved

2 . Рефакторинг вашего пространства имен App.xaml.cs для размещения нового изменения:

Refactor its namespace

3 . Перестройте свое решение.

[4]. Перейдите к свойствам вашего проекта и установите объект Startup для вашего файла App.xaml в новом месте.

set the Startup object to your App.xaml

* * Тысяча двадцать-три [5]. Запустите ваше приложение, и оно должно успешно работать:)
0 голосов
/ 31 марта 2011

Я не могу продублировать проблему с моей стороны.Вот что я попробовал:

Я создал приложение со стилем в ресурсах App.xaml.Я переместил App.xaml в подкаталог.У меня есть другое окно, в котором используется стиль, определенный в ресурсах App.xaml (он находится в другом каталоге), и он смог решить его просто отлично.Я добавил .. \ в начало моего оригинала StartupUri.

Я немного искал, какую версию Visual Studio вы используете?Очевидно, что в VS2008 может быть ошибка, связанная с вашей проблемой:

http://bengribaudo.com/blog/2010/08/19/106/bug-single-application-resources-entry-ignored

Он говорит, что для обхода этой ошибки нужно установить атрибут x:Name в Application.Надеюсь, это поможет!

РЕДАКТИРОВАТЬ: я также попытался обработать событие Startup вместо использования StartupUri, и он все еще работал нормально.

public partial class App : Application
{
     private void Application_Startup(object sender, StartupEventArgs e)
     {
          new MainWindow().Show();
     }
}

РЕДАКТИРОВАТЬ ЧАСТЬ 2:

Хорошо, я вложил SolidColorBrush в ResourceDictionary следующим образом:

<ResourceDictionary>
     <SolidColorBrush Color="LightGray" x:Key="brush" /> 
</ResourceDictionary>

И окно поднимает кисть.Дизайнеру это не нравится, но когда я переключаюсь со StaticResource на DynamicResource, он перестает жаловаться.

РЕДАКТИРОВАТЬ 3:

Я просто кое-что подумал.У вас установлен VS2010 SP1?В конструкторе исправлено некоторых ошибок .

И извините, мой номер 2 редактирования не сработал, как ожидалось.Я заметил, что мои синие загогулины исчезли в xaml, но я не проверял дизайнера.x__x

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