在这个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会更好?
答案 0 :(得分:2)
对于初学者,你的括号在你的例子中位于错误的位置(你实际上是将一个应用程序对象转换为LinearBrush),例如:
((LinearGradientBrush)Application.Current)
但“正确”语法将自动完成,但不编译:
(Application.Current as App).KeyedTwoColorGradient;
问题在于,与用户控件不同,没有与Apple.xaml相同的designer.cs,因此命名成员只对intellisense可见,但实际上没有代码隐藏属性。
您应该仅将密钥用于资源。