Как получить доступ к ресурсу XAML из файла C # CustomControl.cs? - PullRequest
1 голос
/ 06 ноября 2010

У меня есть класс XXXCustomControl.cs, и внутри класса c # я хочу получить к нему доступ через

groupStyle.ContainerStyle = this.FindResource("GroupHeaderStyle") as Style;

GroupHeaderStyle, но этот стиль определен где-то еще (где бы это ни было ...)

Теперь мой вопрос: Как лучше всего разместить мой GroupHeaderStyle и как получить его через

FindResource из кода c #?

Ответы [ 2 ]

5 голосов
/ 06 ноября 2010

Если ваш стиль определен в ResourceDictionary, вы всегда можете получить к нему доступ в коде с помощью

Uri resourceLocater = new Uri("/AssemblyName;component/DictionaryName.xaml", System.UriKind.Relative);
ResourceDictionary resourceDictionary = (ResourceDictionary)Application.LoadComponent(resourceLocater);
groupStyle.ContainerStyle = resourceDictionary["GroupHeaderStyle"] as Style; 
2 голосов
/ 06 ноября 2010

Вы должны включить свой XAML-файл, содержащий стиль, в словарь ресурсов вашего приложения как MergedDictionary:

<Application.Resources>
    <ResourceDictionary>
        <!--  here you can add some more resources -->
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="mystyles.xaml"/>
            <!--  here you can add some dictionaries -->
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

См. Пример здесь: http://www.wpftutorial.net/MergedDictionaryPerformance.html

Или на самом деле вы можете поместить свой стильопределение непосредственно в ресурсы приложения, без объединенных словарей ресурсов.Но в этом случае ресурсы приложения обычно раздуваются довольно быстро.

Редактировать:
Для библиотеки у вас нет App.xaml.Таким образом, вам нужно сделать в основном следующее:

  1. Добавить словарь ресурсов в свой проект и определить там необходимые стили.
  2. В ресурсах элемента управления обратитесь к словарю как кобъединенный словарь.

Обратите внимание, что вам необходимо указать полный путь (" pack URI ") к словарю:

<Control.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/YourAssembly;component/Styles.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Control.Resources>
...