C# 风格完全改变了

C# 风格完全改变了,c#,wpf,xaml,C#,Wpf,Xaml,为什么这个ModernUI文本框 将其外观更改为此 当我所做的只是添加此样式时: <UserControl.Resources> <Style TargetType="{x:Type TextBox}"> <Setter Property="TextAlignment" Value="Right"/> </Style> </UserControl.Resources> 当我直接在元素中设置属性时

为什么这个ModernUI文本框

将其外观更改为此

当我所做的只是添加此样式时:

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

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

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

一切看起来都应该如此:


我真的不明白这一点,如果能给我一个简短的提示,我将不胜感激。

问题是它将完全取代另一种风格

添加属性以指定此样式将扩展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所指出的那样


阅读此问题以了解更多详细信息:

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

如果将
BasedOn
添加到模板中以引用另一种样式,并赋予其红色边框,则它将继承其他所有内容,并且只更改setter的属性

所以
就变成了


有道理吗?除了当您已经有一个属性绑定到模板以使用一个依赖项属性执行所需操作时,为什么需要为其放置样式设置器?

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

资源中创建一个默认样式

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


噢,该死的大卫,就因为这个,你居然以秒数lol+1击败了我!这感觉太疯狂了。如果在您编写时,我使用TargetType=“{x:Type TextBox}”和BasedOn=“{StaticResource{x:Type TextBox}}”定义样式,它会按预期工作。OP没有应用任何样式,并且是隐式的。您还应该包括一个示例,其中
BasedOn
基于隐式样式
{StaticResource{x:Type TextBox}
@ChrisW。是的,非常接近。我也投票给你。。我已经两年多没用wpf了。