WPF 创建样式而不覆盖默认样式
WPF create style without overriding default style
在我的 wpf 应用程序中,我想设置所有文本框的样式。结果我的 App.xaml 看起来像:
<Application x:Class="IM.WindowsApp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
<Application.Resources>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Foreground" Value="Yellow"/>
</Style>
</Application.Resources>
</Application>
在MainWindow.xaml我有:
<TextBox Text="Some Text" />
当我运行觉得它很棒时,文本显示为黄色,正如我预期的那样。
现在我的问题来了
现在我想向该文本框添加一些其他 样式。结果我修改了我的代码看起来像
<TextBox Text="Some Text">
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Opacity" Value=".8" />
</Style>
</TextBox.Style>
</TextBox>
当我 运行 我的文本框前景不再是黄色时 :( 。我不想替换样式。
一个解决方案是给原始样式一个资源键。然后我可以放置 BasedOn={StaticRecource MyResourceKey}
。这不是解决方案,因为我必须将 Style="{StaticResource MyResourceKey}"
添加到我的应用程序中的所有文本框。我想避免这样做。
你可以 'BasedOn' 没有像这样 x:Key 的样式
<TextBox Text="Some Text" >
<TextBox.Style>
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
<Setter Property="Opacity" Value=".8" />
</Style>
</TextBox.Style>
</TextBox>
在我的 wpf 应用程序中,我想设置所有文本框的样式。结果我的 App.xaml 看起来像:
<Application x:Class="IM.WindowsApp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
<Application.Resources>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Foreground" Value="Yellow"/>
</Style>
</Application.Resources>
</Application>
在MainWindow.xaml我有:
<TextBox Text="Some Text" />
当我运行觉得它很棒时,文本显示为黄色,正如我预期的那样。
现在我的问题来了
现在我想向该文本框添加一些其他 样式。结果我修改了我的代码看起来像
<TextBox Text="Some Text">
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Opacity" Value=".8" />
</Style>
</TextBox.Style>
</TextBox>
当我 运行 我的文本框前景不再是黄色时 :( 。我不想替换样式。
一个解决方案是给原始样式一个资源键。然后我可以放置 BasedOn={StaticRecource MyResourceKey}
。这不是解决方案,因为我必须将 Style="{StaticResource MyResourceKey}"
添加到我的应用程序中的所有文本框。我想避免这样做。
你可以 'BasedOn' 没有像这样 x:Key 的样式
<TextBox Text="Some Text" >
<TextBox.Style>
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
<Setter Property="Opacity" Value=".8" />
</Style>
</TextBox.Style>
</TextBox>