событие триггера кнопки не работает для границы? - PullRequest
2 голосов
/ 28 марта 2019

Я много искал, как создать шаблон для кнопки в wpf, чтобы избежать или переопределить событие мыши по умолчанию, и я создаю свой собственный шаблон (с помощью других кодов), но мои коды, вероятно, не работают. Я хочу изменить цвет фона и изменить вид границы, но триггер границы не работает. Пожалуйста, проверьте мои коды и помогите мне исправить это.

        <Button x:Name="AccountBtn" Width="250" Height="100" Margin="5 5 5 5" >
            <Button.Style>
                <Style TargetType="{x:Type Button}">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="Button">
                                <Border Name="Myborder" BorderThickness="1 1 1 1" BorderBrush="#EDEDED" Background="{TemplateBinding Background}">
                                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                                </Border>
                                <ControlTemplate.Triggers>
                                    <Trigger Property="IsMouseOver" Value="True">
                                        <Setter Property="BorderBrush" Value="LightGray"/>
                                        <Setter Property="BorderThickness" Value="2 2 2 2"/>
                                    </Trigger>
                                </ControlTemplate.Triggers>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                    <Style.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Background" Value="Green"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </Button.Style>
        </Button>

1 Ответ

1 голос
/ 28 марта 2019

Правильный код будет следующим:

<Button x:Name="AccountBtn" Width="250" Height="100" Margin="5 5 5 5" >
    <Button.Style>
        <Style TargetType="{x:Type Button}">
            <Setter Property="BorderThickness" Value="1 1 1 1"/>
            <Setter Property="BorderBrush" Value="#EDEDED"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Button">
                        <Border Name="Myborder"
                                BorderThickness="{TemplateBinding BorderThickness}"
                                BorderBrush="{TemplateBinding BorderBrush}"
                                Background="{TemplateBinding Background}">
                            <ContentPresenter HorizontalAlignment="Center"
                                              VerticalAlignment="Center"/>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Background" Value="Green"/>
                    <Setter Property="BorderBrush" Value="LightGray"/>
                    <Setter Property="BorderThickness" Value="2 2 2 2"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

Проблема с вашим кодом не в том, что триггер не работает.Триггер работает должным образом, но значения свойств BorderBrush и BorderThickness игнорируются в вашем шаблоне!

Поэтому я изменил код таким образом, что

  • значения BorderBrush и BorderThickness взяты из свойств Button,
  • начальные значения установлены в стиле, а
  • (необязательно) переместили триггерыиз шаблона управления прямо в стиль.

Вот и все!

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