WPF - доступ к ресурсам во время разработки, когда App.xaml's Build Action = Page - PullRequest
7 голосов
/ 13 мая 2009

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

Спасибо

Ответы [ 3 ]

6 голосов
/ 13 апреля 2011

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

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

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

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

<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.

3 голосов
/ 29 сентября 2009

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

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

    // Do everything else
}
0 голосов
/ 29 сентября 2009

Если я правильно вас понял, вы загружаете ресурсы приложения в 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

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