Storyboard型のプロパティを持つカスタムユーザーコントロールを作成しました。 XAMLでXAML、カスタムプロパティ、アニメーションを使用したSilverlightの非常に奇妙な問題
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();
}
}
}
次のように私はそれを使用する:ような何か
<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>
をこれまでのところは良いです。
その後、私はストーリーボードとともに別のアイテムが必要であると判断しました。そこで、ストーリーボードと別の情報を含むカスタムオブジェクトを受け入れるようにコードを変更しました。以下のような何か:
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>
<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を解決できませんが」
誰もが理由を知っていますか?
この例では、カスタムオブジェクトを使用せず、代わりに別のプロパティを使用することで問題を回避できます。しかし、これは私のシナリオの単純化されたバージョンであり、問題に焦点を当てています。実際のシナリオでは、カスタムオブジェクトを使用する必要があります。
提案していただきありがとうございますが、私はそれを試してみましたが動作しませんでした。 私はまったく同じ動作をします。 –