Применить стиль WPF по умолчанию - PullRequest
10 голосов
/ 03 июня 2009

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

Есть идеи? Спасибо.

1 Ответ

11 голосов
/ 03 июня 2009

Есть несколько способов сделать это. Если вы посмотрите на Список приоритетов на 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" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...