Silverlight在XAML、自定义属性和动画方面存在非常奇怪的问题
我创建了一个自定义用户控件,该控件的属性类型为Storyboard。比如: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);
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
我想一旦你做了这两件事,你的问题就解决了 谢谢你的建议,但我只是试了一下,结果没用。我得到了完全相同的行为。