注册自定义URI协议以处理来自XAML的自定义资源加载

时间:2011-10-22 19:42:58

标签: wpf xaml .net-4.0 uri

我正在开发一个项目,其中XAML(和一些相关的IronPython代码)的松散位将由客户端应用程序动态加载和执行。客户端将使用自定义WCF服务(以及一些本地缓存)来检索XAML,后备脚本和相关资源(图标,图像等)。

我想注册一个自定义URI协议/方案,以便动态包的开发人员更容易引用他们的资源,如下所示:

<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <UserControl.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>

                <ResourceDictionary Source="custom://MyPackage/Icons.xaml"  />
                <ResourceDictionary Source="custom://MyPackage/Styles.xaml" />
                <!--                        ^^^^^^                         -->

            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </UserControl.Resources>
</UserControl>

据我所知,我可以推导出自定义UriParserregister it,但这似乎只是成功的一半。剩下的工作是提供解析自定义URI和检索所需内容所需的任何组件。

是否可以在WPF中提供或覆盖功能,以便在遇到我的自定义URI时调用我的自定义数据服务?或者,如果这是不可能的,还有其他选择吗?

2 个答案:

答案 0 :(得分:4)

根据我的理解,您需要创建一个派生自WebRequest的类,并将其注册到WebRequest.RegisterPrefix

答案 1 :(得分:0)

作为替代方案,我想知道您是否可以创建一个继承自ResourceDictionary的新类(因为它不是sealed)并为new提供Source定义。这样您就可以截取设置为Source的值,然后针对您的自定义UriParser运行它。这样您还可以使用结果轻松更新ResourceDictionary