2012-10-19 20 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">