WPF创建样式而不覆盖默认样式

时间:2015-09-02 16:05:41

标签: wpf xaml styles resourcedictionary

在我的wpf应用程序中,我想要设置所有TextBox的样式。因此,我的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}"添加到我的应用程序的所有文本框中。我想避免这样做。

1 个答案:

答案 0 :(得分:4)

你可以'没有x:KeyOn'这样的风格

<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>