2012-12-26 15 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