2012-12-26 47 views
2

我在控制類Storyboard的實例時遇到了問題。WPF Storyboard無法控制此類的新實例,與Silverlight應用程序混淆

它在XAML中定義的資源:

<Window.Resources> 
    <Storyboard x:Name="Storyboard1" x:Key="Storyboard1"> 

而且我試圖讓它停下來,像這樣:

 Storyboard sb = (Storyboard)this.TryFindResource("Storyboard1"); 
     sb.Seek(TimeSpan.Zero); 

但是,沒有成功。如果我嘗試調用實例Storybord1的代碼,那麼我得到的錯誤是,在當前上下文中沒有這樣的實例(並且,如果在C#代碼中,我嘗試使用intellisense來查看也沒有成功,導致描述前衛問題)。

當我試圖找到這種情況下用:

 foreach (var item in this.Resources) 
     { 
      MessageBox.Show(item.ToString()); 
     } 

沒有成功。

我不是做困難或使用超封裝設計模式,我找不到/使用它。

只需添加一個UI元素和一個Storyboard並更改不透明度即可。

我只想自己控制所有Storyboard的玩法。當我可以停止並啓動它。

在Silverlight中,我沒有遇到任何問題(因爲Storyboard1可以在Silverlight中訪問),但在WPF中,所有由defualt設置的故事板都是自動播放的,我無法控制它的實例。

我該如何解決?

謝謝!

PS 如果這可以幫你做一件對我的建議,請看:

http://ideone.com/O0x93O - C#

http://ideone.com/Drc1SP - XAML

回答

1

其實我可以訪問你的故事板,你的信箱會彈出故事板名稱。我認爲,當你在你的代碼後面啓動它時,你希望你的控制按鈕淡入。我刪除了Windows.Trigger,你必須在你的控件正常顯示之後啓動Storyboard,然後將其不透明度設置爲0,並將Storyboard Instance設置爲類級變量。

int count = 0; 
Storyboard _sb; 
public MainWindow() 
{ 
    InitializeComponent(); 

    var sb = this.TryFindResource("Storyboard1"); 
    _sb = sb as Storyboard; 
} 

然後使用任何事件/你要條件用於觸發它(在這種情況下,我使用的窗口加載事件

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    _sb.Begin(); 
} 
0

那是因爲你正在試圖做的是,在窗口構造器。相反,將您的代碼移動到Loaded事件。

+0

你在哪裏看到的,它是在窗口構造函數? – Secret