Как создать экземпляр WPF ResourceDirectory из кода позади - PullRequest
0 голосов
/ 13 февраля 2019

Привет! Я пытаюсь создать ResourceDirectory из кода за каталогом, который, похоже, создан, но он пуст (ресурсы, указанные в файле xaml, не предвидятся.

Код C #:

    public static void InstallResources(IUnityContainer container)
    {
        var viewModelLocatorResources = new ViewModelLocatorResources();
        viewModelLocatorResources.InitializeComponent();
        Application.Current.Resources.MergedDictionaries.Add(viewModelLocatorResources);
        var viewModelLocator = (KViewModelLocator)Application.Current.Resources.FindName("ViewModelLocator");
        // Error viewModelLocator is null
        var viewModelResolver = (UnityViewModelResolver)viewModelLocator.Resolver;
        viewModelResolver.SetContainer(container);
    }

XAML код:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:viewModelSupport="clr-namespace:KWPFComponents.ViewModelSupport"
                x:Class="ViewModelLocatorResources">
    <viewModelSupport:KViewModelLocator x:Key="ViewModelLocator">
        <viewModelSupport:KViewModelLocator.Resolver>
            <viewModelSupport:UnityViewModelResolver />
        </viewModelSupport:KViewModelLocator.Resolver>
    </viewModelSupport:KViewModelLocator>
</ResourceDictionary>

1 Ответ

0 голосов
/ 13 февраля 2019

Попробуйте выполнить следующее:

var resourceDictionary = new ResourceDictionary
{
    Source = new Uri("/AssemblyName;component/DictionaryName.xaml", UriKind.Relative)
};

var viewModelLocator = (KViewModelLocator)resourceDictionary["ViewModelLocator"];

Предполагается, что имя вашей сборки - AssemblyName, а имя файла словаря ресурсов - DictionaryName.xaml.Также предполагается, что этот файл находится в корневом каталоге проекта.Если он находится в другом каталоге, вам необходимо исправить URI соответствующим образом.

...