代码之家  ›  专栏  ›  技术社区  ›  Berryl

在代码wpf中访问资源字典

  •  16
  • Berryl  · 技术社区  · 14 年前

    同一程序集中的同一行代码适用于一个测试夹具,但不适用于另一个。以下是代码行:

    var dic = new ResourceDictionary { Source = new Uri("pack://application:,,,/MyApp.Wpf;component/ImageResources.xaml") };
    

    我在另一个测试夹具中得到的错误是System.UriFormatException异常:无效URI:指定的端口无效。

    uri字符串也适用于xaml。有没有更好的方法在代码中加载资源字典?

    干杯,

    ===更新===

    就像我在 this posting ,出现无效端口,因为包方案未注册,这可以通过如下代码完成:

    if (!UriParser.IsKnownScheme("pack"))
         UriParser.Register(new GenericUriParser(GenericUriParserOptions.GenericAuthority), "pack", -1);
    

    我猜能够用pack方案加载字典而没有错误的测试装置是因为SUT是那里的一个用户控件,并且在创建用户控件的实例时以某种方式加载资源。

    2 回复  |  直到 14 年前
        1
  •  32
  •   Drew Noakes    8 年前

    我用的是乌里安的那种

    var resource = new ResourceDictionary
    {
        Source = new Uri("/myAssemblyName;component/Themes/generic.xaml",
                         UriKind.RelativeOrAbsolute)
    };
    

    HTH公司

        2
  •  1
  •   MikeT    8 年前

    但是,访问ResourceDictionary的首选方法是在XAML中将其作为合并字典添加

    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="ImageResources.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
    

    然后您可以使用 TryFindResource(string Key)