如何将主题应用于自定义控件从文本框继承

时间:2014-01-14 06:17:44

标签: wpf styles controls

我创建了从文本框继承的WPF控件

我已将Theme BureauBlue 添加到我的项目中,并将以下XAML添加到我的Application.xaml

<Application.Resources>
    <ResourceDictionary Source="Themes/BureauBlue.xaml"/>
</Application.Resources>

我希望将相同的主题应用于从TextBox继承的Custome Control

我怎样才能实现这个

Amit Saraf

根据建议编辑更改

<Application.Resources>
    <ResourceDictionary Source="Themes/BureauBlue.xaml"/>

    <Style TargetType="WPFControls:MyTextBox">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="TextBox">
                    <TextBox Text="{TemplateBinding Text}"/>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Application.Resources>

ERR

The property "Resources" can only be set once.
The specified value cannot be assigned. The following type was expected: "ResourceDictionary".

1 个答案:

答案 0 :(得分:0)

如果定位到Textbox的样式不适用于其自定义控件(从Textbox继承的控件。如果您知道BureauBlue's样式,请将其作为针对您的派生类名称的新样式,如果您不知道该样式,我可以为此建议一种解决方法。

创建一个定位到custom control的新样式,并在其中定义Template,如下所示

 <Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Themes/BureauBlue.xaml" />
        </ResourceDictionary.MergedDictionaries>
        <Style TargetType="WPFControls:MyTextBox">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="TextBox">
                        <TextBox Text="{TemplateBinding Text}" />
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ResourceDictionary>
</Application.Resources>

注意:模板绑定您倾向于在custom control类中使用的属性。

此处定位到Style的{​​{1}}将适用于您的Textbox