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

如何从prism模块提供DataTemplate

  •  -1
  • J4N  · 技术社区  · 6 年前

    我有一个WPF应用程序,有了Prism,我们使用了一些模块(在全球范围内,还有很多微服务)。

    我正在搜索最佳实践,以便为应用程序提供一个可用于表示模型的模板。

    由于我必须从模块中执行此操作,所以我不能只创建一个ResourcesDictionary并将其添加到应用程序资源中。

    你会怎么做?我们的目标是很好地隔离特性。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Andy    6 年前

    我想你还没有完全解释你的目的或你在这里有什么。考虑到这一限制条件。

    如果您在应用程序中创建了常规资源字典,则可以在应用程序中合并该字典。xaml。

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

    然后,您可以使用x:Key或隐式样式将资源定位在标记中。以及以数据类型为目标的模板。

    这样做的目的是将资源字典中的内容添加到一种字典中。(这不完全是一本字典)它有键和值。
    具有整个应用程序的范围。
    您可以引用其中的内容并将其切换出去。您可以在代码中合并另一个资源字典。但一旦他们在那里,他们就会一直呆在那里,直到你关闭应用程序或清除这些资源。

    您可以阅读资源字典:

    ResourceDictionary rd = new ResourceDictionary
    {
         Source = new Uri("Dictionary1.xaml", UriKind.Relative)
    };
    

    并将其合并:

    Application.Current.Resources.MergedDictionaries.Add(rd);
    

    如果在标记中合并资源字典,甚至不必编译它。我从未在代码中尝试过这一点,但我想您可能会发现可以合并一个“松散”的未编译资源字典。如果它不能直接工作,那么您肯定可以使用xamlreader。加载或。将未编译的rd解析为内存中的rd。

    这增加了应用范围。若你们想这样做,那个么也许你们应该在应用程序中合并你们的资源字典。尽管是xaml。
    如果您想要范围,那么windows、usercontrols等都有资源。您可以在任意级别将资源字典合并到中,然后它的范围将比应用程序的范围窄。