使用自定义URI协议注册XAML的自定义资源加载处理程序

5
我正在开发一个项目,其中松散的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>

据我所知,我可以派生一个自定义的UriParser注册它,但这似乎只是其中一部分。其余的工作是提供必要的组件来解析自定义URI并检索所需内容。
是否可能提供或覆盖WPF中的功能,以允许在遇到我的自定义URI之一时调用我的自定义数据服务?如果不可能,是否有任何替代方法?
2个回答

4

我知道这一定是件容易的事情。谢谢! - Adam Maras

0
作为一种替代方案,我想知道您是否可以创建一个继承自ResourceDictionary的新类(因为它不是sealed),并为Source提供一个new定义。这将让您拦截被设置为Source的值,并对其运行您的自定义UriParser。这也将允许您轻松地使用结果更新ResourceDictionary

1
如果Source是虚拟的,它可能有效,因为您可以覆盖它。但是,如果使用"new",它只会隐藏基类属性并声明一个新属性。WPF永远不会使用此属性,因为它不知道它的存在。 - Thomas Levesque
我认为如果新的定义具有更新ResourceDictionary所需的所有逻辑,则WPF不需要使用Source。 - FunnyItWorkedLastTime

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接