如果找不到资源,函数TryFindResource将返回null。 有没有办法为TryFindResource找不到的任何密钥提供一些后备值?
我们有一个大项目,用包装器替换TryFindResource并不容易。 第一种方法是实现我们自己的ResourceDictionary并将其添加到MergedDictionaries,但Alas ResourceDictionary是一个类而不是接口,我们不能覆盖它的方法。
所以我正在寻找一种让TryFindResource不在未知资源上返回null的正确方法。
答案 0 :(得分:1)
最少侵入性的方法可能会扫描您的代码库并使用下面的扩展方法。您调用的任何地方 FindResource 都会将其更改为 FindResourceEx 。
public static class FrameworkElementExtensions
{
public static Object TryFindResourceEx(this FrameworkElement el, Object resourceKey)
{
var result = el.FindResource(resourceKey);
if(result == null)
{
// fallback handling here
}
return result;
}
}
答案 1 :(得分:0)
如果我弄错了,那么你可以使用Extensions,它允许你写回退。
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
var resource= Application.Current.TryFind("ApplicationResource");
}
}
public static class ApplicationExtension
{
public static Object TryFind(this Application application,string resourceName)
{
return Application.Current.TryFindResource(resourceName) ?? "Your fall back resource";
}
}