Применить стиль WPF по умолчанию

у меня есть глобальный стиль, который задает все мои TextBox стили, но в некоторых случаях я хочу вернуться просто цвет оригинальная нестандартная стиле цвет. Я пробовал использовать {TemplateBinding Foreground} в границах TextBoxes что я хотел вернуться. Это не оказалось допустимым XAML, и я не уверен, что это правильный путь.

какие идеи? Спасибо.

1 ответов


есть несколько способов сделать это. Если вы посмотрите на Списку на MSDN затем вы можете увидеть, что forground, установленный способами 1-8, переопределит Foreground стиль по умолчанию. Самый простой способ - просто установить локальное значение в TextBox.

<TextBox Foreground="Red" />

еще одна вещь, которую вы можете сделать, это использовать 'BasedOn' свойство стилей для переопределения других версий. Это требует предоставления значения ключа вашему стилю по умолчанию, но затем его можно использовать также применяются по умолчанию, как в этом примере:

    <Style TargetType="{x:Type TextBox}"
           x:Key="myTextBoxStyle">
        <Setter Property="Foreground"
                Value="Red" />
        <Setter Property="FontWeight"
                Value="Bold" />
    </Style>
    <!-- Style applies to all TextBoxes -->
    <Style TargetType="{x:Type TextBox}"
           BasedOn="{StaticResource myTextBoxStyle}" />


<TextBox Text="Hello">
    <TextBox.Style>
        <Style BasedOn="{StaticResource myTextBoxStyle}" TargetType="{x:Type TextBox}">
            <Setter Property="Foreground"
                    Value="Blue" />
        </Style>
    </TextBox.Style>
</TextBox>


Edit:
В случае, если стиль по умолчанию применяет значение, и вы хотите вернуть его к базовому значению, есть несколько способов, которые я могу придумать, чтобы получить это поведение. Вы не можете, насколько я знаю, привязаться к значению темы по умолчанию в общем виде.

мы можем, однако, сделать некоторые другие вещи. Если нужен стиль, чтобы не применять некоторые свойства, мы можем установить стиль {x:Null}, таким образом останавливая стиль по умолчанию от применения. Или мы можем дать элементу собственный стиль, который не наследуется от базового стиля, а затем повторно применить только те сеттеры, которые нам нужны:

        <TextBox Text="Hello" Style="{x:Null}" />
        <TextBox Text="Hello">
            <TextBox.Style>
                <Style TargetType="{x:Type TextBox}">
                    <Setter Property="FontWeight"
                            Value="Bold" />
                </Style>
            </TextBox.Style>
        </TextBox>

мы могли бы изменить стиль по умолчанию, так что передний план будет установлен только на определенных условиях, таких как тег, являющийся определенным значением.

    <Style TargetType="{x:Type TextBox}"
           x:Key="myTextBoxStyle">
        <Setter Property="FontWeight"
                Value="Bold" />
        <Style.Triggers>
            <Trigger Property="Tag"
                     Value="ApplyForeground">
                <Setter Property="Foreground"
                        Value="Red" />
            </Trigger>
        </Style.Triggers>
    </Style>

   <TextBox Text="Hello" />
    <TextBox Text="Hello" Tag="ApplyForeground" />