Как изменить цвет границы с помощью триггеров в WPF? - PullRequest
0 голосов
/ 26 апреля 2019

Мне нужно изменить цвет границы одного текстового поля, когда мышь наводит его, но с решением, которое я пишу, это не работает. Есть ли ошибка в моем коде? Цвет фона меняется, но рамка №.

Код ниже - моя идея.

 <Style x:Key="BorderColor" TargetType="TextBox">
        <Setter Property="FontStyle" Value="Normal"/>
        <Style.Triggers>
            <Trigger Property="TextBox.IsMouseOver" Value="true">
                <Setter Property="BorderBrush" Value="Red"/>
                <Setter Property="Background" Value="LightBlue"/>
            </Trigger>
        </Style.Triggers>

Ответы [ 2 ]

1 голос
/ 26 апреля 2019

Быстрый и простой способ сделать это - просто установить толщину границы TextBox на 0 и инкапсулировать ее в родительскую рамку:

<Border BorderThickness="1" Width="500" Height="20" >
    <Border.Style>
        <Style TargetType="{x:Type Border}">
            <Setter Property="BorderBrush" Value="Black" />
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="BorderBrush" Value="Red" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </Border.Style>
    <TextBox x:Name="theTextBox" BorderThickness="0" />
</Border>

«Правильный» способ сделать это - шаблон всего элемента управления :

<Style TargetType="{x:Type TextBox}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TextBox}">
                <Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
                    <ScrollViewer x:Name="PART_ContentHost" Focusable="false" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"/>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="BorderBrush" TargetName="border" Value="Red"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
0 голосов
/ 26 апреля 2019

Цвет границы кнопки контролируется триггерами шаблона кнопки через свойства кнопки (Templated Parent). Поскольку приоритет таких триггеров почти самый высокий, вам необходимо переопределить шаблон управления кнопки.

https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/dependency-property-value-precedence

...