如何在代码隐藏中从Application.Resources访问命名资源?

时间:2011-08-07 16:03:22

标签: c# silverlight

在这个Silverlight应用程序中,我试图从MainPage类中的Application.Resources访问资源。资源具有x:Name属性而不是x:Key。

我知道我可以使用以下代码行从Application.Resources分配一个键控资源:

grid1.Background = (LinearGradientBrush)Application.Current.Resources["KeyedTwoColorGradient"];

使用这个逻辑我尝试将一个命名资源分配给我的grid1.Background并使用:

grid1.Background = ((LinearGradientBrush)Application.Current).Resources.NamedTwoColorGradient;

这行代码给了我一个错误: 无法将类型'System.Windows.Application'转换为'System.Windows.Media.LinearGradientBrush'

我也尝试过不同的线路但没有任何效果。我无法从其他地方找到答案,所以我在这里提出这个问题。

此外,有人可以告诉我何时使用命名资源以及什么时候使用Keyed会更好?

1 个答案:

答案 0 :(得分:2)

对于初学者,你的括号在你的例子中位于错误的位置(你实际上是将一个应用程序对象转换为LinearBrush),例如:

 ((LinearGradientBrush)Application.Current)

但“正确”语法将自动完成,但编译:

(Application.Current as App).KeyedTwoColorGradient;

问题在于,与用户控件不同,没有与Apple.xaml相同的designer.cs,因此命名成员只对intellisense可见,但实际上没有代码隐藏属性。

您应该仅将密钥用于资源。