ColorAnimation не любит меня, использующего DynamicResource в моем файле WPF xaml - PullRequest
1 голос
/ 15 ноября 2010

определенный цвет ключа в моем приложении загружается как динамические ресурсы.Это прекрасно работает большинство элементов управления, кроме ColorAnimation.Для этого создается исключение:

Невозможно преобразовать значение в атрибуте «Кому» в объект типа «System.Nullable`1 [[System.Windows.Media.Color, PresentationCore, Version =3.0.0.0, Культура = нейтральная, PublicKeyToken = 31bf3856ad364e35]] '.'# FF93CF65' не является допустимым значением свойства 'To'.

Я использую тот же ресурс в стиле, и в этом случае он работает нормально.Данный вопрос показан ниже:

<Style x:Key="ChildWindowButtonBarButtonStyle" TargetType="{x:Type Button}">
    <Setter Property="BorderBrush" Value="{DynamicResource ButtonBorder}" />
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="BorderBrush" Value="#ffffb14c" />
        </Trigger>
        <Trigger Property="IsEnabled" Value="false">
            <Trigger.EnterActions>
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation BeginTime="00:00:00" Duration="00:00:00.8"  Storyboard.TargetProperty="Opacity" From="1" To=".5" />
                    </Storyboard>
                </BeginStoryboard>
            </Trigger.EnterActions>
            <Trigger.ExitActions>
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation BeginTime="00:00:00" Duration="00:00:00.4"  Storyboard.TargetProperty="Opacity" From=".5" To="1" />
                        <ColorAnimation  BeginTime="00:00:00" Duration="00:00:00.2"   Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" To="Green"/>
                        <ColorAnimation  BeginTime="00:00:00.3" Duration="00:00:00.4"   Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" To="{StaticResource ButtonBorder}"/>
                    </Storyboard>
                </BeginStoryboard>
            </Trigger.ExitActions>
        </Trigger>
    </Style.Triggers>
</Style>

У кого-нибудь есть идеи по этому поводу?
- Дейв

Ответы [ 3 ]

5 голосов
/ 15 ноября 2010

Я только что попробовал, и это работает

<Color x:Key="ButtonBorderColor">Green</Color>
<SolidColorBrush x:Key="ButtonBorder" Color="{StaticResource ButtonBorderColor}" />

<Style x:Key="ChildWindowButtonBarButtonStyle" TargetType="{x:Type Button}">
    <Setter Property="BorderBrush" Value="{DynamicResource ButtonBorder}" />
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="BorderBrush" Value="#ffffb14c" />
        </Trigger>
        <Trigger Property="IsEnabled" Value="false">
            <Trigger.EnterActions>
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation BeginTime="00:00:00" Duration="00:00:04"  Storyboard.TargetProperty="Opacity" From="1" To=".5" />
                    </Storyboard>
                </BeginStoryboard>
            </Trigger.EnterActions>
            <Trigger.ExitActions>
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation BeginTime="00:00:00" Duration="00:00:04" Storyboard.TargetProperty="Opacity" From=".5" To="1" />
                        <!--<ColorAnimation  BeginTime="00:00:00" Duration="00:00:02" Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" To="Green"/>-->
                        <ColorAnimation  BeginTime="00:00:00" Duration="00:00:04" Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" To="{StaticResource ButtonBorderColor}"/>
                    </Storyboard>
                </BeginStoryboard>
            </Trigger.ExitActions>
        </Trigger>
    </Style.Triggers>
</Style>
1 голос
/ 15 ноября 2010

Согласно http://objectmix.com/csharp/733011-wpf-using-storyboards-custom-control.html и нескольким часам случайных экспериментов, я пришел к выводу, что это невозможно сделать.Не легко, наконец.

0 голосов
/ 15 ноября 2010

Вы пытаетесь установить значение Color с помощью свойства Brush. Попробуйте изменить

<ColorAnimation  BeginTime="00:00:00.3" Duration="00:00:00.4"   Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" To="{StaticResource ButtonBorder}"/>

до:

<ColorAnimation  BeginTime="00:00:00.3" Duration="00:00:00.4"   Storyboard.TargetProperty="(Border.BorderBrush)" To="{StaticResource ButtonBorder}"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...