gpt4 book ai didi

c# - 无法转换到 VisualState - "No applicable name scope"

转载 作者:行者123 更新时间:2023-11-30 17:56:24 26 4
gpt4 key购买 nike

我已将 silverlight TemplatedControl 移植到 WPF,虽然它的行为基本相同,但动画不再有效。

当我调用 VisualStateManager.GoToState() 时,它返回 false。为了手动强制执行此操作,我听从了其他人的建议并按名称查找视觉状态组,并强制 Storyboard运行:

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

但是这会引发异常不存在解析名称“PART_MyPart”的适用名称范围 当我调用 Storyboard.Begin() 时。

经过进一步调查,当调用 NameScope.GetNameScope() 时,VisualStateManager、视觉状态和 Storyboard都返回 null,因此我也尝试在代码中手动设置它们:

        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 中完全符合预期。

谁能阐明为什么 silverlight 和 WPF 之间在 NameScope 方面会有不同的行为?

谢谢

最佳答案

在您的控件模板中检索命名元素并调用 storyboard.Begin(_retrievedElement) 而不仅仅是 storyboard.Begin() 来解决“No applicable name scope”问题。在这种情况下,传递的框架元素的名称范围将应用于 Storyboard。参见 http://msdn.microsoft.com/en-us/library/system.windows.media.animation.storyboard.begin.aspx有关此方法的不同重载的更多信息。

不幸的是,我无法重构为什么 Visual States Manager 不适用于您的控件。

更新:我可能已经明白为什么您的控件模板在 Silverlight 中有效,但在 WPF 中无效。下一个答案中的详细信息。

关于c# - 无法转换到 VisualState - "No applicable name scope",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14231518/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com