为什么这个ModernUI TextBox
将其外观更改为此
当我所做的只是添加这种风格时:
<UserControl.Resources>
<Style TargetType="{x:Type TextBox}">
<Setter Property="TextAlignment" Value="Right"/>
</Style>
</UserControl.Resources>
当我直接在元素中设置属性时:
<TextBox Text="" TextAlignment="Right"></TextBox>
一切看起来应该如此:
我真的不明白这一点,并会感谢一点点提示。
答案 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>