2012-10-19 22 views
2

我在我的WPF应用程序的警告观察在Visual Studio输出面板下面的文字:WPF动画警告:6:无法执行操作

WPF动画警告:6:无法执行操作,因为指定的 故事板从未应用于此对象的交互式 control.Action ='停止'; Storyboard ='System.Windows.Media.Animation.Storyboard'; Storyboard.HashCode ='65981734'; Storyboard.Type = 'System.Windows.Media.Animation.Storyboard'; TargetElement ='System.Windows.Controls.ContentPresenter'; TargetElement.HashCode ='49882372'; TargetElement.Type = 'System.Windows.Controls.ContentPresenter'

我怎么能 '反向' 的hashCode一些XAML元素?如何找到动画附件?

在此先感谢

回答

5

您可以使用下面的代码来找到你的故事板:

private string GetStoryBoardNameByHashCode(int hashCode) 
{ 
    foreach (DictionaryEntry resource in Resources) 
    { 
     if (resource.Value is Storyboard) 
     { 
      if (resource.GetHashCode() == hashCode) 
       return ((Storyboard) resource.Value).Name; 
     } 
    } 
    return String.Empty; 
} 

执行类似的方法,以便:

string storyBoardName = GetStoryBoardNameByHashCode(65981734); 

这应该是能够获得故事板 - 用HashCode(如果你想获得指定的StoryBoard,你也可以返回)。请注意,ResourceDictionary在这里是Window-scope(local)。所以,如果故事板都位于应用程序的资源字典(App.xaml中)然后改变“资源”到:

Application.Current.Resources 

可能有一种替代的方式得到一个WPF应用程序的所有资源,而不是只是本地或应用程序范围,但没有研究过这一点。希望这段代码能让你找到你的问题。


这里是sample代码,以防万一你需要它!

+0

是否情节提要对象,对每个运行相同的哈希码? –

2

其实,我遇到了和你一样的问题。

我发现在调用Stop()方法之前,动画的Begin()方法没有被调用。所以运行时会发出警告,说明Stop操作无法被调用。

0

我的问题是我在我的EventName中有一个尾随空格。

<interactivity:EventTrigger EventName="SelectionChanged "> 

改为

<interactivity:EventTrigger EventName="SelectionChanged">