为WPF中的TryFindResource提供回退值

时间:2013-10-25 12:54:55

标签: c# wpf localization

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

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

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

2 个答案:

答案 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";
        }
    }