2012-01-10 5 views
0

Я делаю несколько классов-оболочек, которые инкапсулируют данные настройки из элементов управления базовым классом, но я бы хотел, чтобы они использовали стиль базового класса. Я могу добиться этого с помощью следующей XAML:Производный контроль с использованием базового класса Стиль без XAML

<Style TargetType="{x:Type bc:DerviedClass}" BasedOn="{StaticResource {x:Type etk:BaseClass}}"/> 

Я предпочел бы не использовать XAML, чтобы клиент программист не должен добавить эту строку в свой XAML код. Есть ли способ сделать это на C#?

Благодаря

ответ

0

Вы должны рассмотреть Styling/Themeing с помощью Themes/Generic.xaml файл стиль вашего пользовательского элемента управления.

  1. Вещи, чтобы иметь в виду при использовании Generic.xaml:
    • Ресурс должен быть назван Generic.xaml и в папке темы (вопросы случай)
    • AssemblyInfo.cs нужен ThemeInfo атрибут
      • [сборка: ThemeInfo (ResourceDictionaryLocation.SourceAssembly, ResourceDictionaryLocation.SourceAssembly)]

Эта тема станет стандартной, когда бы она ни использовалась.

0

Я нашел решение этой проблемы: метод

Style s = (Style)derivedObj.FindResource(baseType); 

if(s != null) 
{ 
    Style derivedStyle = new Style(derivedObj.GetType(), s); 
    derivedObj.Style = derivedStyle; 
} 
+0

Да, это работает, если находится внутри OnInitialized() (не работает в конструкторе правильно). Однако он не применяется в дизайнере. Есть идеи? –