【问题标题】:WPF create style without overriding default styleWPF 创建样式而不覆盖默认样式
【发布时间】:2015-09-02 16:05:40
【问题描述】:

在我的 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" />

当我运行它时,文本显示为黄色,就像我预期的那样。

这是我的问题

现在我想为该文本框添加一些 additional 样式。结果我修改了我的代码看起来像

<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}" 添加到我的应用程序的所有文本框中。我想避免这样做。

【问题讨论】:

    标签: wpf xaml styles resourcedictionary


    【解决方案1】:

    你可以像这样没有 x:Key 的“BasedOn”样式

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

    【讨论】:

    • 没用 :( 。虽然它会起作用,但我似乎是一个很好的解决方案。
    • 嗯.. 这很奇怪。我为此创建了一个新项目,它对我有用。首先尝试在空项目中执行此操作,也许您有另一种覆盖前景的样式。
    • 我创建了一个基本样式&lt;Style TargetType="{x:Type Control}" x:Key="TxtInputBase" ... etc,然后创建了&lt;Style TargetType="{x:Type PasswordBox}" BasedOn="{StaticResource TxtInputBase}" /&gt;,这样做使您的技术发挥了作用。非常感谢!我不明白为什么。也许我不得不清理没有意义的解决方案。无论如何,再次感谢您的帮助,效果很好。
    • 很高兴听到这个消息。你所做的是另一种使它起作用的方法。我希望您理解这一点:“通过在样式上设置 x:Key 属性,您就是在告诉 WPF,当您在特定控件上显式引用它时,您只想使用此样式。”。因此,如果您设置 x:Key="TxtInputBase" 我的解决方案将不起作用,因为 WPF 将等待您明确设置样式名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多