Silverlight在XAML、自定义属性和动画方面存在非常奇怪的问题

Silverlight在XAML、自定义属性和动画方面存在非常奇怪的问题,silverlight,xaml,animation,storyboard,Silverlight,Xaml,Animation,Storyboard,我创建了一个自定义用户控件,该控件的属性类型为Storyboard。比如: public class UC : UserControl { public static readonly DependencyProperty AnimationProperty = DependencyProperty.Register( "Animation", typeof(Storyboard), typeof(UC), null);

我创建了一个自定义用户控件,该控件的属性类型为Storyboard。比如:

public class UC : UserControl
{
    public static readonly DependencyProperty AnimationProperty = DependencyProperty.Register(
        "Animation",
        typeof(Storyboard),
        typeof(UC),
        null);

    public Storyboard Animation
    {
        get { return (Storyboard)GetValue(AnimationProperty); }
        set { SetValue(AnimationProperty, value); }
    }

    public UC()
    {
        this.Loaded += new RoutedEventHandler(UC_Loaded);
    }

    private void UC_Loaded(object sender, RoutedEventArgs e)
    {
        if (this.Animation != null)
        {
            this.Animation.Begin();
        }
    }
}
public class UC : UserControl
{
    public static readonly DependencyProperty AnimationProperty = DependencyProperty.Register(
        "Animation",
        typeof(AnimationHolder),
        typeof(UC),
        null);

    public AnimationHolder Animation
    {
        get { return (AnimationHolder)GetValue(AnimationProperty); }
        set { SetValue(AnimationProperty, value); }
    }

    public UC()
    {
        this.Loaded += new RoutedEventHandler(UC_Loaded);
    }

    private void UC_Loaded(object sender, RoutedEventArgs e)
    {
        if (this.Animation != null)
        {
            this.Animation.Animation.Begin();
        }
    }
}

public class AnimationHolder
{
    public Storyboard Animation
    {
        get;
        set;
    }

    public int OtherValue
    {
        get;
        set;
    }
}
在XAML中,我使用它如下:

<loc:UC x:Name="uc" Opacity="0" >
    <TextBlock FontSize="50">Some text</TextBlock>
    <loc:UC.Animation>
        <Storyboard>
            <DoubleAnimation Storyboard.TargetName="uc" Storyboard.TargetProperty="Opacity" To="0.5" Duration="0:0:1" />
        </Storyboard>
    </loc:UC.Animation>
</loc:UC>
并在XAML中使用它:

<loc:UC x:Name="uc" Opacity="0" >
    <TextBlock FontSize="50">Some text</TextBlock>
    <loc:UC.Animation>
        <loc:AnimationHolder OtherValue="20">
            <loc:AnimationHolder.Animation>
                <Storyboard>
                    <DoubleAnimation Storyboard.TargetName="uc" Storyboard.TargetProperty="Opacity" To="0.5" Duration="0:0:0" />
                </Storyboard>
            </loc:AnimationHolder.Animation>                            
        </loc:AnimationHolder>
    </loc:UC.Animation>
</loc:UC>

一些文本
然而,现在当我尝试开始动画时,我得到一个InvalidOperationException消息:“无法解析TargetName uc。”

有人知道为什么吗


我知道在这个例子中,我可以通过不使用自定义对象而使用另一个属性来解决这个问题。然而,这是我的场景的简化版本,它关注于问题。在真实场景中,我必须使用自定义对象

新方法需要做两件事:

  • AnimationHolder
    类中,将
    Animation
    属性设置为依赖属性,就像以前一样
  • DependencyObject
    派生
    AnimationHolder
    类。这是必要的,这样您就可以将
    动画
    设置为依赖属性。请记住,只有从
    DependencyObject
    派生的类才能定义依赖属性

我想一旦你做了这两件事,你的问题就解决了

谢谢你的建议,但我只是试了一下,结果没用。我得到了完全相同的行为。