【问题标题】:Silverlight Dynamic Resource File LocationSilverlight 动态资源文件位置
【发布时间】:2011-07-13 13:55:57
【问题描述】:

我正在尝试为我的资源字典链接到一个外部文件,而不是在已编译的 silverlight 应用程序中。我希望能够将“主题”放到我网站上的文件夹中,并且能够在每次创建新主题时都无需重新编译和上传即可使用它们。

我已成功更改资源,但我无法找到链接到不在已编译应用程序中的文件的方法。

这是我目前所拥有的:

private void BlueButtonClick(object sender, RoutedEventArgs e)
{
  var s = App.GetResourceStream(new System.Uri("/DynamicDictionary;component/dict2.xaml", System.UriKind.Relative)).Stream;
  var reader = new StreamReader(s);
  var xaml = reader.ReadToEnd();
  var rdd = (ResourceDictionary)XamlReader.Load(xaml);
  Resources.MergedDictionaries.Add(rdd);
  VictoryIsMine();
}

我希望能够将“/DynamicDictionary;component/dict2.xaml”更改为“http://localhost:9393/dict2.xaml”,但它给了我一个错误。

大家有什么建议吗?

* 编辑 **

当我尝试使用 localhost 引用它时,它给了我以下错误:

{System.UriFormatException: 一个相对的 无法创建 URI,因为 'uriString' 参数代表一个 绝对 URI。在 System.Uri.CreateThis(字符串 uri, Boolean dontEscape, UriKind uriKind)
在 System.Uri..ctor(字符串 uriString, UriKind uriKind) 在 DynamicDictionary.MainPage.RedButtonClick(对象 发件人,RoutedEventArgs e) 在 System.Windows.Controls.Primitives.ButtonBase.OnClick() 在 System.Windows.Controls.Button.OnClick() 在 System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs 吃 System.Windows.Controls.Control.OnMouseLeftButtonUp(控制 ctrl, EventArgs e) 在 MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex,Int32 实际参数类型索引,字符串 事件名称)}

【问题讨论】:

    标签: c# silverlight resources


    【解决方案1】:

    没有实用的方法以您正在寻找的直接方式从文件外部获取它。

    你有两个我知道的选项(不是说没有其他选项,但这是我通常看到的做法):

    1. 您可以使用 MEF 的 DeploymentCatalog 或获取 WebClient 并将其作为程序集加载,使用 AssemblyParts 对其进行解析,然后创建资源字典引用并手动将其添加到应用程序的资源集合中

    2. 您可以使用 WebClient 获取资源的 XAML。然后,您可以使用 XAML 加载器加载和处理它,然后将其添加到资源集合中。然而,这将更加棘手,因为您必须预测 XAML 中引用的命名空间,并确保配置它们并将它们传递给 XAML 加载器

    虽然主题在 XAML 中看起来“不错”,但 XAML 只不过是一个声明性对象图。在它下面,是实际的代码。因此,您必须加载代码才能使主题正常工作,而将该代码添加到正在运行的部署的唯一方法是将其解析为动态添加的程序集,或者将 XAML 加载到进程空间并以这种方式添加。

    PS -- 我看到您使用的是阅读器,您可以尝试传入 UriKind.Absolute - 如果这不起作用,请使用 WebClient 并以这种方式传入文本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-28
      • 1970-01-01
      • 1970-01-01
      • 2019-05-19
      • 2010-10-26
      相关资源
      最近更新 更多