Почему определенная в XAML анимация вызывает исключение System.InvalidOperationException - PullRequest
0 голосов
/ 08 ноября 2018

Мне нужно определить простую анимацию в XAML (без кода позади), которая должна вращать фоновое изображение кнопки, изменяя логическое свойство bounded. У меня есть кнопка в XAML:

<Button Style="{StaticResource btnStyle}" />

В разделе Resources окна, которое я создаю, следующее:

<RotateTransform Angle="180" x:Key="rotAt180" />

<Style TargetType="Button" x:Key="btnStyle">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate>
                <Image Source="Images\pic.png" />
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <DataTrigger Binding="{Binding MyBoolProp}" Value="False">
            <Setter Property="RenderTransform" Value="{StaticResource rotAt180}" />
            <!-- This animation works good -->
            <DataTrigger.EnterActions>
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation From="0" To="180" Duration="0:0:0.2" Storyboard.TargetProperty="RenderTransform.Angle" />
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.EnterActions>
            <!-- This animation causes exception -->
            <DataTrigger.ExitActions>
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation From="180" To="0" Duration="0:0:0.2" Storyboard.TargetProperty="RenderTransform.Angle" />
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.ExitActions> 
        </DataTrigger>
    </Style.Triggers>
</Style>

MyBoolProp инициализируется значением True. Первая анимация работает отлично. Но вторая анимация вызывает System.InvalidOperationException в PresentationFramework.dll ( "Невозможно разрешить все ссылки на свойства в пути свойства" RenderTransform.Angle ". Проверьте, что соответствующие объекты поддерживают такие свойства" ).

Я попытался переместить вторую анимацию в триггер, где MyBoolProp Истина:

 <DataTrigger Binding="{Binding MyBoolProp}" Value="True">
 <DataTrigger.EnterActions>
     <BeginStoryboard>
         <Storyboard>
             <DoubleAnimation From="180" To="0" Duration="0:0:0.2" Storyboard.TargetProperty="RenderTransform.Angle" />
          </Storyboard>
      </BeginStoryboard>
  </DataTrigger.EnterActions> 

Но результат тот же. Что не так в такой реализации?

1 Ответ

0 голосов
/ 08 ноября 2018

RenderTransform должен быть установлен в стиле, а не в DataTrigger:

<Style TargetType="Button" x:Key="btnStyle">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate>
                <Image Source="Images\pic.png" />
            </ControlTemplate>
        </Setter.Value>
    </Setter>

    <Setter Property="RenderTransform" Value="{StaticResource rotAt180}"/>
    <Setter Property="RenderTransformOrigin" Value="0.5,0.5" />

    <Style.Triggers>
        <DataTrigger Binding="{Binding MyBoolProp}" Value="False">
            <DataTrigger.EnterActions>
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation To="0" Duration="0:0:0.2"
                            Storyboard.TargetProperty="RenderTransform.Angle" />
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.EnterActions>
            <DataTrigger.ExitActions>
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation To="180" Duration="0:0:0.2"
                            Storyboard.TargetProperty="RenderTransform.Angle" />
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.ExitActions>
        </DataTrigger>
    </Style.Triggers>
</Style>
...