风格完全改变

时间:2015-04-16 15:42:52

标签: c# wpf xaml

为什么这个ModernUI TextBox

enter image description here

将其外观更改为此

enter image description here

当我所做的只是添加这种风格时:

<UserControl.Resources>
    <Style TargetType="{x:Type TextBox}">
        <Setter Property="TextAlignment" Value="Right"/>
    </Style>
</UserControl.Resources>

当我直接在元素中设置属性时:

<TextBox Text="" TextAlignment="Right"></TextBox>

一切看起来应该如此:

enter image description here

我真的不明白这一点,并会感谢一点点提示。

3 个答案:

答案 0 :(得分:6)

问题在于它将完全取代其他风格。

添加BasedOn属性以指定此样式将扩展ModernUI样式:

<UserControl.Resources>
    <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource whateverModernUIStyleNameIs}">
        <Setter Property="TextAlignment" Value="Right"/>
    </Style>
</UserControl.Resources>

您也可以指定隐含风格:BasedOn="{StaticResource {x:Type TextBox}}",正如Mike C所指出的那样。

阅读此问题以获取更多详细信息:How to apply multiple styles in WPF

答案 1 :(得分:4)

通过指定您正在设置TargetType TextBox BasedOn的新样式模板,您隐式覆盖已为其设置的任何其他样式模板。

如果您将<Style TargetType="{x:Type TextBox}">添加到模板中以引用其他样式,并为其指定红色边框,则它将继承其他所有内容,并且只更改您具有setter的属性。

那么<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource TheKeyNameOfTheOtherStyleTemplateYouAreReferencing}">就变成了;

{{1}}

有意义吗?除非为什么你需要为它设置一个样式设置器,当你已经有一个绑定到模板的属性来使用一个依赖属性做你想做的事情?

答案 2 :(得分:3)

因为您将现有样式替换为仅设置文本对齐的样式。

使用Resources based on默认样式

创建样式
<Style
    BasedOn="{StaticResource {x:Type TextBox}}"
    TargetType="{x:Type TextBox}">
    <Setter Property="TextAlignment" Value="Right"/>
</Style>