WPF не может найти цель триггера, хотя она была определена ранее - PullRequest
0 голосов
/ 13 апреля 2020

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

У меня есть собственный стиль с пользовательским шаблоном кнопки, в котором я хочу изменить цвет фона как с анимацией, так и без.

Итак, у меня есть этот код XAML:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:h="clr-namespace:MainWindowsClient.Helpers"
                xmlns:local="clr-namespace:MainWindowsClient">

<Style x:Key="LoginButtonStyle" TargetType="{x:Type Button}">
    <Setter Property="Foreground" Value="White"/>
    <Setter Property="HorizontalContentAlignment" Value="Center"/>
    <Setter Property="VerticalContentAlignment" Value="Center"/>
    <Setter Property="Padding" Value="10"/>
    <Setter Property="FontFamily" Value="{StaticResource RobotoLight}"/>
    <Setter Property="FontSize" Value="15"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border x:Name="border" SnapsToDevicePixels="true">
                    <Border.Background>
                        <SolidColorBrush x:Name="BBB" Color="{StaticResource MattBlue}"/>
                    </Border.Background>
                    <ContentPresenter x:Name="contentPresenter"
                                      Focusable="False"
                                      HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                      Margin="{TemplateBinding Padding}"
                                      RecognizesAccessKey="True"
                                      SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                                      VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter Property="Color" TargetName="BBB" Value="{StaticResource NormalGrey}"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>

        </Setter.Value>
    </Setter>
</Style>

Когда я пытаюсь скомпилировать свой код, я получаю ошибку Cannot find the Trigger target 'BBB'. (The target must appear before any Setters, Triggers, or Conditions that use it.), даже если имя было объявлено перед секцией триггера.

Дело в том, что он работает, когда я заменяю Триггер на EventTrigger (который обращается к цвету таким же образом), как это внезапно работает:

<EventTrigger RoutedEvent="MouseEnter">
         <BeginStoryboard>
                <Storyboard>
                     <ColorAnimation Storyboard.TargetProperty="Color" Storyboard.TargetName="BBB" From="{StaticResource MattBlue}" To="{StaticResource LightBlue}" Duration="0:0:0.3"/>
                </Storyboard>
         </BeginStoryboard>
</EventTrigger>

Я попытался перезапустить visual studio et c. который помог мне с другими ошибками XAML, но я все еще получаю ошибку.

Когда я пытаюсь использовать решение, указанное в первом посте Я связался для обычного триггера, я получаю ошибку Background is not supported in a Windows Presentation Foundation (WPF) project. Буду очень признателен за любую помощь!

PS: Поскольку я хочу анимировать и цвет фона кнопки, я думаю, что я не могу просто установить BorderBru sh напрямую, но должен изменить цвет бру sh.

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