Производные классы и темы наследования в WPF? - PullRequest
4 голосов
/ 01 ноября 2010

Я создаю приложение WPF, и я получил набор элементов управления из стандартных типов элементов управления WPF - текстовых блоков, кнопок и т. Д. Я попытался добавить словарь ресурсов в app.xaml, чтобы задать тему, но мой пользовательский органы управления, кажется, не уважают это. (Например, стандартные кнопки достаточно хорошо воспринимают тему Aero, но myButton, созданный на основе кнопки, по-прежнему не выглядит.) Можно ли настроить тему для своих производных элементов управления так же, как для базовых элементов управления?

РЕДАКТИРОВАТЬ: я должен отметить, что эти пользовательские элементы управления создаются во время выполнения, поэтому я не могу манипулировать их свойствами напрямую через XAML. Я могу изменить определенные свойства, такие как цвет фона, используя Setter в словаре ресурсов приложения, но не нашел способа задать тему с помощью этого метода.

1 Ответ

1 голос
/ 01 ноября 2010

Если у вас есть этот стиль в словаре ресурсов под названием Dictionary1.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Style x:Key="MyButtonStyle"
           TargetType="{x:Type Button}" 
           BasedOn="{StaticResource {x:Type Button}}">
        <Setter Property="Width" Value="75" />
        <Setter Property="Height" Value="23" />
    </Style>
</ResourceDictionary>

Затем вы можете установить его на любую кнопку с этим кодом позади

Uri resourceLocater = new Uri("/YourAssemblyName;component/Dictionary1.xaml", System.UriKind.Relative);
ResourceDictionary resourceDictionary = (ResourceDictionary)Application.LoadComponent(resourceLocater);
Style myButtonStyle = resourceDictionary["MyButtonStyle"] as Style;

Button button = new Button();
button.Style = myButtonStyle;
...