2010-11-15 44 views
0

我的应用程序中的某些关键颜色被加载为动态资源。这很好地工作,除了ColorAnimation以外的大多数控件。对于这一点,它抛出异常:ColorAnimation不喜欢我在我的WPF xaml文件中使用DynamicResource

不能在属性“收件人”值转换为类型System.Nullable`1 [[System.Windows.Media.Color,PresentationCore的”对象,版本= 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> 

有没有人对此有任何意见?
- Dave

回答

0

您试图使用Brush属性设置Color值。尝试改变

<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}"/> 
+0

不,没有喜悦。我确实发现了另一篇文章(http://objectmix.com/csharp/733011-wpf-using-storyboards-custom-control.html),似乎表明它是通过设计并且不容易解决。因此,我正在结束这个问题。 – dave 2010-11-15 05:46:55

5

我只是尝试它和这个作品

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