Silverlight の TemplatedControl を WPF に移植しましたが、ほとんど同じように動作しますが、アニメーションが機能しなくなりました。
呼び出すVisualStateManager.GoToState()
とfalseが返されます。これを手動で強制しようとして、他の誰かの推奨に従い、視覚状態グループを名前で検索し、ストーリーボードを強制的に実行しました。
foreach (VisualStateGroup vsg in VisualStateManager.GetVisualStateGroups(part_LayoutRoot))
{
VisualState vs = vsg.States.Cast<VisualState>().FirstOrDefault(o => o.Name == visualState);
if (vs == null)
throw new ApplicationException("No visual state found with name: " + visualState);
vs.Storyboard.Begin();
break;
}
No applicable name scope exists to resolve the name 'PART_MyPart'
ただし、これを呼び出すと例外がスローされますStoryboard.Begin()
。
さらに調査すると、VisualStateManager、ビジュアル ステート、およびストーリーボードはすべて、呼び出されたときに null を返すNameScope.GetNameScope()
ため、コードでも手動で設定しようとしました。
var nameScope = NameScope.GetNameScope(vs.Storyboard);
if (nameScope == null)
{
nameScope = NameScope.GetNameScope(part_LayoutRoot);
NameScope.SetNameScope(vsg, nameScope);
NameScope.SetNameScope(vs, nameScope);
NameScope.SetNameScope(vs.Storyboard, nameScope);
}
ただし、例外は発生し続けており、私の人生では理由を考えることができません。これは、Silverlight で期待どおりに機能します。
NameScope に関して Silverlight と WPF の間で動作が異なる理由を誰かが明らかにすることはできますか?
ありがとう