Запутанность пространства имен - PullRequest
2 голосов
/ 19 марта 2012

У меня есть приложение WPF, которое я пытаюсь преобразовать в DLL.Проблема в том, что у меня в App.XAML настроен ряд ресурсов уровня приложения.В DLL я пытаюсь установить свои ресурсы программно.

Для программной загрузки моих ресурсов у меня есть следующее:

ResourceDictionary myResourceDictionary = new ResourceDictionary();
myResourceDictionary.Source = new Uri("C:\\Users\\Ash\\Documents\\Visual Studio 2010\\Projects\\moo Process Flow Manager\\moo Process Flow Manager\\Resources\\Styles\\Shared.xaml");
Application.Current.Resources.MergedDictionaries.Add(myResourceDictionary);
myResourceDictionary = new ResourceDictionary();
myResourceDictionary.Source = new Uri("C:\\Users\\Ash\\Documents\\Visual Studio 2010\\Projects\\moo Process Flow Manager\\moo Process Flow Manager\\Resources\\Styles\\ToolBar.xaml");
Application.Current.Resources.MergedDictionaries.Add(myResourceDictionary);
myResourceDictionary = new ResourceDictionary();
myResourceDictionary.Source = new Uri("C:\\Users\\Ash\\Documents\\Visual Studio 2010\\Projects\\moo Process Flow Manager\\moo Process Flow Manager\\Resources\\Styles\\ZoomBox.xaml");
Application.Current.Resources.MergedDictionaries.Add(myResourceDictionary);

Эта строка:

myResourceDictionary.Source = new Uri("C:\\Users\\Ash\\Documents\\Visual Studio 2010\\Projects\\moo Process Flow Manager\\moo Process Flow Manager\\Resources\\Styles\\ZoomBox.xaml");

Выдает следующую ошибку во время выполнения:

'Failed to create a 'Type' from the text 's:ZoomBox'.' Line number '5' and line position '12'.

С внутренним исключением:

{"Type reference cannot find type named '{clr-namespace:Arkitec.moo.ProcessFlowManager.Controls}ZoomBox'."}

Вот строка, которая вызывает ошибку в zoombox.xaml:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:s="clr-namespace:Arkitec.moo.ProcessFlowManager.Controls">

    <Style TargetType="{x:Type s:ZoomBox}">

Здесь объявлен класс, который должен искатьв в zoombox.cs:

namespace Arkitec.moo.ProcessFlowManager.Controls
{
    public class ZoomBox : Control
    {

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

РЕДАКТИРОВАТЬ: Согласно ответу Гиламмеса, я пытался:

myResourceDictionary.Source = new Uri("Resources/Styles/Shared.xaml", UriKind.Relative);

Нополучить следующую ошибку:

Cannot locate resource 'resources/styles/shared.xaml'.

1 Ответ

0 голосов
/ 16 августа 2012

Попробуйте установить свойство shared.xaml следующим образом:

Build Action --> Page
copy to output directory --> do not copy
custom tool --> MSBuild:Compile

затем отсылаем xaml следующим образом

new System.Uri("/YourNamespace;Resources/Styles/Shared.xaml", System.UriKind.Relative);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...