2010-11-06 3 views
1

У меня есть класс XXXCustomControl.cs и внутри классов C# Я хочу, чтобы получить доступ черезКак получить доступ к ресурсу XAML из файла C# CustomControl.cs?

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

в GroupHeaderStyle, но этот стиль определяется в другом месте (там, где это ...)

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

FindResource from C# code?

ответ

2

Вы должны включить файл 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> 
+0

Да, я сделал это с моим программным проектом, но я не думал, что проект управления нуждается/имеет файл app.xaml. Похоже, что сторонний бесплатный веб-проект управления был разорван автором ROFL: P Кажется, у пользовательской библиотеки управления есть только Generic.xaml ... Так как мне получить доступ к этому generic.xaml из моего кода C#? – Elisabeth

+0

@ Lisa: Вы разрабатываете библиотеку, а не приложение? – Vlad

+0

На самом деле ДА :-) 10 сейчас ... LOL – Elisabeth

5

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

Uri resourceLocater = new Uri("/AssemblyName;component/DictionaryName.xaml", System.UriKind.Relative); 
ResourceDictionary resourceDictionary = (ResourceDictionary)Application.LoadComponent(resourceLocater); 
groupStyle.ContainerStyle = resourceDictionary["GroupHeaderStyle"] as Style;