2009-05-13 1 views
6

Я изменил действие сборки моего App.xaml на «страницу», чтобы обработать заставку и убедиться, что мое приложение запущено как один экземпляр только (имея мою собственную точку входа). Он отлично работает во время выполнения, но во время разработки приложение больше не может видеть мои ресурсы. Ресурсы находятся в отдельных файлах xaml, расположенных в одном проекте. Как я могу заставить свое приложение снова увидеть ресурсы в режиме разработки?WPF - доступ к ресурсам во время разработки App.xaml Build Action = Страница

Благодаря

+0

Я могу переключаться взад и вперед - измените действие App.xaml на страницу, когда я готов опубликовать и переключить ее обратно в процессе разработки. Но разве это то, что я должен делать? –

ответ

0

Если я понимаю, что вы исправить, вы загружаете ресурсы приложения в app.xaml? В этом случае вы можете сделать так:


App app = new App(); 
//Get assembly name is your own method 
string assemblyName = GetAssemblyName(Assembly.GetExecutingAssembly()); 

Uri resourceLocater = new Uri("/" + assemblyName + ";component/app.xaml", UriKind.Relative); 
System.Windows.Application.LoadComponent(app, resourceLocater); 
MainWindow mainWindow = new MainWindow(); 
app.Run(mainWindow); 

Тогда ваши ресурсы будут загружены

/Daniel

+6

В оригинальном вопросе говорится, что проблема возникает только во время разработки. Мне кажется, что вышеуказанный код не будет влиять на время разработки. Что мне не хватает? (У меня такая же проблема: он отлично работает во время выполнения, но я получаю ссылку «StaticResource reference ... not found error» во время разработки) – CyberMonk

+1

Это не поможет. См. Ответ, который я только что добавил. Густаво, почему вы отметили это как правильное? –

3

Убедитесь, что вы звоните InitializeComponent() в первой строке конструктора вашего приложения:

public App() 
{ 
    // This is the method generated by VisualStudio that initializes 
    // the application from associated XAML file 
    InitializeComponent(); 

    // Do everything else 
} 
+1

OMG, я имею в виду OMFG. Я боролся с дизайнером, который не нашел мои статические ресурсы в отдельном проекте управления, где в главном проекте есть приложение app.xaml, которое загружает и объединяет словари. Создание App.xaml в проекте управления, а затем удаление его, чтобы иметь только ресурсные словари, а вызов InitializeComponent() сделал что-то совершенно неожиданное - он сработал! элементы управления в элементах управления теперь рендеринга вместо жалоб на недостающие ресурсы, ошибки intellisense в представлении xaml тоже ушли - о счастливый день !!!! – Erikest

6

Фактор ваших ресурсов в отдельный словарь ресурсов, а затем потяните их в App.xaml следующим образом:

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="MasterResources.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

При необходимости можно добавить несколько ресурсных словарей.

Вы также должны сделать то же самое в UserControls (и Windows, что ссылки на элементы управления UserControl с использованием ресурсов):

<UserControl.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="MasterResources.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</UserControl.Resources> 

См http://ithoughthecamewithyou.com/post/Merging-Resource-Dictionaries-for-fun-and-profit.aspx больше по этой теме.

+6

Когда я использовал этот подход, у меня были отдельные копии ресурсов, определенных в MasterResources.xaml для каждого UserControl, который их объединяет, что приводит к ужасности памяти. –

+2

Точно. Ресурсы и стили совместного использования или графики между компонентами пользовательского интерфейса являются ключевым аспектом кодирования пользовательского интерфейса WPF, но, похоже, для него нет никакой поддержки в режиме разработки, а рекомендация MS просто копировать ресурсы везде, где вы используете это просто вздор. – Neutrino

+0

Это должен быть принятый ответ. Ссылка, в частности, описывает точно такой же сценарий, который был поднят в вопросе. Я также столкнулся с одной и той же проблемой и обнаружил, что, к сожалению, слияние словарей в каждое отдельное окно, а usercontrol - единственное решение для дизайнера, неспособного разрешить ресурсы.Предполагается, что WPF - это отличная технология, но в последнее время мне кажется, что я вынужден использовать один взлом за другим, чтобы заставить его работать. – Eternal21

 Смежные вопросы

  • Нет связанных вопросов^_^