【问题标题】:ColorAnimation does not like me using a DynamicResource in my WPF xaml fileColorAnimation 不喜欢我在我的 WPF xaml 文件中使用 DynamicResource
【发布时间】:2010-11-15 02:58:31
【问题描述】:

我的应用程序中的某些键颜色作为动态​​资源加载。除了 ColorAnimation 之外,大多数控件都可以正常工作。为此,它会引发异常:

无法将属性“To”中的值转换为“System.Nullable`1[[System.Windows.Media.Color, PresentationCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]] 类型的对象. “#FF93CF65”不是属性“To”的有效值。

我在样式中使用完全相同的资源,在这种情况下它工作得很好。有问题的xaml如下所示:

<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>

有人对此有任何想法吗?
- 戴夫

【问题讨论】:

    标签: wpf silverlight xaml


    【解决方案1】:

    我试过了,效果很好

    <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>
    

    【讨论】:

      【解决方案2】:

      根据http://objectmix.com/csharp/733011-wpf-using-storyboards-custom-control.html和几个小时的随机实验,我得出的结论是,这是做不到的。终于不容易了。

      【讨论】:

        【解决方案3】:

        您正在尝试使用 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}"/>
        

        【讨论】:

        • 不,不快乐。我确实找到了另一篇文章 (objectmix.com/csharp/…),似乎声明它是设计使然,不容易解决。因此,我正在结束这个问题。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-29
        • 2011-08-14
        • 1970-01-01
        • 1970-01-01
        • 2018-04-04
        • 1970-01-01
        相关资源
        最近更新 更多