在XAML中,我这样做:
<Button Style="{StaticResource NavigationBackButtonNormalStyle}" />
如何在代码隐藏中执行相同的操作?
答案 0 :(得分:18)
页面级Resources对象能够查找本地,应用程序级别,静态和主题资源。这意味着您只需执行此操作:
foo2.Style = this.Resources["NavigationBackButtonNormalStyle"] as Style;
祝你好运!
答案 1 :(得分:7)
在设计期间,似乎试图解决一个&#34;系统资源&#34;使用Resources[key]
将无法找到资源,并将返回null
。例如,要使用Style
获取TextBox
的基数Resources[typeof(TextBox)]
,将返回null
。
相反,请使用TryFindResource(key)
,因为这将首先尝试Resources[key]
然后尝试搜索&#34;系统资源&#34;并将返回您要查找的内容(根据MSDN和Reference Source)。
换句话说,请尝试这样做:
var style = Application.Current.TryFindResource(key) as Style;
答案 2 :(得分:1)
这是一个可以使用的通用助手类。走这条路的好处是,你可以使用同一个帮助器来获取其他类型的资源(例如Brushes或DataTemplate)
public static class Helper
{
public static T Get<T>(string resourceName) where T : class
{
return Application.Current.TryFindResource(resourceName) as T;
}
}
以及如何在代码中使用:
yourButton.Style = Helper.Get<Style>("NavigationBackButtonNormalStyle");
如果你想获得刷子资源,你可以使用
ItemTemplate = Helper.Get<DataTemplate>("MyDataTemplate");
答案 3 :(得分:1)
尝试一下
Application.Current.Resources["key"]
答案 4 :(得分:0)
如果您使用的是ViewModel,将无法使用上面的答案。
要及时更新Eternal21的答案,您可以这样:
public static T Get<T>(string resourceName)
{
try{
var success = Application.Current.Resources.TryGetValue(resourceName, out var outValue);
if(success && outValue is T)
{
return (T)outValue;
}
else
{
return default(T);
}
}
catch
{
return default(T);
}
}
请注意,此处缺少where子句。我不想将其限制为类,因此也可以将其与Color一起使用,后者是一种结构...因此将其删除。