如何在代码隐藏中引用 StaticResource?
How do I reference a StaticResource in code-behind?
在XAML中我是这样做的:
<Button Style="{StaticResource NavigationBackButtonNormalStyle}" />
如何在代码隐藏中做同样的事情?
页面级资源对象具有查找本地、应用级、静态和主题资源的能力。这意味着您只需这样做:
foo2.Style = this.Resources["NavigationBackButtonNormalStyle"] as Style;
祝你好运!
在设计时,似乎尝试使用 Resources[key]
解析 "system resource" 将无法找到资源,并且会 return null
。例如,要使用 Resources[typeof(TextBox)]
获取 TextBox
的基数 Style
将 return null
.
相反,请使用 TryFindResource(key)
,因为这将首先尝试 Resources[key]
,然后将尝试搜索 "system resources" 并 return 您要查找的内容(根据 MSDN and Reference Source).
换句话说,试试这个:
var style = Application.Current.TryFindResource(key) as Style;
这是一个可以使用的通用助手 class。走这条路的好处是,您将能够使用相同的助手来获取其他类型的资源(例如画笔或 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");
试试这个
Application.Current.Resources["key"]
如果您在 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 一起使用,这是一个结构...所以将其删除。
在XAML中我是这样做的:
<Button Style="{StaticResource NavigationBackButtonNormalStyle}" />
如何在代码隐藏中做同样的事情?
页面级资源对象具有查找本地、应用级、静态和主题资源的能力。这意味着您只需这样做:
foo2.Style = this.Resources["NavigationBackButtonNormalStyle"] as Style;
祝你好运!
在设计时,似乎尝试使用 Resources[key]
解析 "system resource" 将无法找到资源,并且会 return null
。例如,要使用 Resources[typeof(TextBox)]
获取 TextBox
的基数 Style
将 return null
.
相反,请使用 TryFindResource(key)
,因为这将首先尝试 Resources[key]
,然后将尝试搜索 "system resources" 并 return 您要查找的内容(根据 MSDN and Reference Source).
换句话说,试试这个:
var style = Application.Current.TryFindResource(key) as Style;
这是一个可以使用的通用助手 class。走这条路的好处是,您将能够使用相同的助手来获取其他类型的资源(例如画笔或 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");
试试这个
Application.Current.Resources["key"]
如果您在 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 一起使用,这是一个结构...所以将其删除。