从此页面中,我读到:
如果您的应用程序使用自定义控件并在ResourceDictionary(或XAML资源节点)中定义资源,则建议您将资源定义为应用程序或窗口对象级别,或将其定义为自定义控件的默认主题。在自定义控件的ResourceDictionary中定义资源会对每个该控件实例造成性能影响。
好的...现在,我有一个UserControl定义了以下资源:
<UserControl ...>
<UserControl.Resources>
<Namespace:ImagesConverter x:Key="ImagesConverter" ...
<Storyboard x:Key="AnimationHide" ...
</UserControl.Resources>
因为我在运行时创建了不少于100个实例,如MSDN教程所说,最好将这些资源移动到MainWindow或App级别。应该将它们移动到哪个位置?MainWindow级别、App级别还是资源文件?为什么?
然后……我该怎么从它们的新位置使用它们?假设我在我的UserControl中有这段代码:
m_AnimationHide = (Storyboard)Resources["AnimationHide"];
我应该如何修改它以反映这些更改?我应该如何修改以下UserControl XAML片段呢?
Source="{Binding Source={x:Static Properties:Resources.MyImage}, Converter={StaticResource ImagesConverter}}"
animation.Completed += handler;
。每当我到达那里时,我的应用程序就会崩溃,并告诉我:“DoubleAnimation必须将IsFrozen设置为false才能进行修改”。这些动画必须在完成后对触发它们的UserControl执行某些操作。如何解决? - Tommaso BelluzzoUserControl
将被放置在那个Window
并且可以访问它的Resources
,所以你应该使用{DynamicResource resourceKey}
而不是{StaticResource resourceKey}
。这样会在运行时解析。 - sa_ddam213