0

如果找不到资源,函数 TryFindResource 将返回 null。有没有办法为 TryFindResource 找不到的任何键提供一些后备值?

我们有一个大项目,用包装器替换 TryFindResource 并不容易。第一种方法是实现我们自己的 ResourceDictionary 并将其添加到 MergedDictionaries 但可惜 ResourceDictionary 是一个类而不是接口,我们不能覆盖它的方法。

所以我正在寻找一种正确的方法来使 TryFindResource 不在未知资源上返回 null 。

4

2 回答 2

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;
  }
}
于 2013-10-25T13:09:49.720 回答
0

如果我理解正确,那么您可以使用扩展,它允许您编写回退。

  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";
        }
    }
于 2013-10-25T13:09:19.613 回答