为 WPF 中的 TryFindResource 提供回退值
本文关键字:回退 TryFindResource WPF 中的 | 更新日期: 2023-09-27 18:36:49
如果未找到资源,函数 TryFindResource 将返回 null。有没有办法为 TryFindResource 找不到的任何键提供一些回退值?
我们有一个大项目,用包装器替换TryFindResource并不容易。第一种方法是实现我们自己的 ResourceDictionary 并将其添加到 MergedDictionaryionaries 中,但 ResourceDictionary 是一个类而不是一个接口,我们不能覆盖它的方法。
所以我正在寻找一种正确的方法来使 TryFindResource 不会在未知资源上返回 null。
侵入性最小的方法可能是扫描您的代码库并使用下面的扩展方法。无论您在哪里调用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;
}
}
如果我做对了,那么你可以使用扩展,它允许你编写回退。
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";
}
}