实例化WPF对象并使其可用

时间:2012-04-16 12:54:07

标签: wpf resourcedictionary

下面是一些用于为WPF应用程序实例化ResourceManager的启动代码。如果我想通过xaml提供这个,我会把它放在资源字典中吗?使用ObjectProvider?还有别的吗?

是否有理由在WPF应用程序中更喜欢一种对象实例化方法而不是另一种方法?

干杯,
Berryl

var asm = Assembly.Load("SampleApp.Common");
var resourceMan = new ResourceManager("SampleApp.Common.Resources.SupportedCultures", asm);
DataContext = new MainWindowVm(resourceMan);

1 个答案:

答案 0 :(得分:1)

在我看来,如果你不需要在应用程序生命周期中替换字典,静态类是最好的解决方案:

public static class SampleAppCommonResources
{
    private static ResourceManager _Manager;

    public static ResourceManager Manager
    {
        get
        {
            if (_Manager == null)
            {
                var asm = Assembly.Load("SampleApp.Common");
                _Manager = new ResourceManager("SampleApp.Common.Resources.SupportedCultures", asm);
            }

            return _Manager;
        }
    }
}

XAML用法:

<Menu Tag="{x:Static local:SampleAppCommonResources.Manager}">

如果存在多线程环境,则应使用_Manager分配Interlocked.CompareExchange