首页 > 解决方案 > 在 UWP 类库中设置用户控件的样式并在使用应用程序中覆盖它

问题描述

想象一个 UWP 类库,其中包含多个具有自定义逻辑的用户控件。自定义控件可能是开源的,人们可以使用它创建自己的应用程序。

-Controls
---MyTextBox
---MyButton
---and so on

这些用户控件的默认样式可以通过用户控件的 xaml 中的显式样式内联来完成。我对此进行了测试。但它不是很灵活。人们可能希望对其应用自己的样式。

想要变得更复杂并创建了几个 ResourceDictionaries。让我们说简化它:

-Styles
--MyTextBoxDictionary.xaml
--MyButtonDictionary.xaml

暂时这些只是文件。什么都不知道。如果我想使用它们,我在 stackoverflow 上学到了,我需要一个文件“Themes/Generic.xaml”(记住我在一个 UWP 类库项目中,需要保留这个先决条件)。在这里了解到,我需要像这样使用 MergedDictionaries 加载该文件中的字典:

<ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="MyTextBoxDictionary.xaml"/>
        <ResourceDictionary Source="MyButtonDictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>

因为我要加载的字典位于一个名为“Styles”的文件夹中,所以我需要对来自不同文件夹的同一个程序集执行PACK URIS之类的操作。不工作。按钮仍然没有样式。所以我将样式定义直接移动到“Themes/Generic.xaml”中,只是为了测试。不工作。按钮仍然没有样式。

所以有几个问题:

  1. 如何在位于单独文件夹中的类库项目中使用多个字典文件来设置自定义用户控件的样式?
  2. 如果上述方法不可行,我还有哪些其他方法?
  3. 这甚至可以使用 ThemedStyles 吗?
  4. 如何让消费应用覆盖我的“默认”样式?我对默认样式使用隐式样式并为覆盖样式使用显式的唯一方法不是吗?还有其他方法吗?

标签: c#wpfxamluwpstyles

解决方案


您可以像这样将 ResourceDictionary 添加到您的 Themes/Generic.xaml 文件中

<ResourceDictionary Source="/MyProject.Name/Styles/MyTextBoxDictionary.xaml" />

您可以使用“属性”窗格来设置源,而不必知道确切的语法。为此,您可以输入以下内容

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary />
</ResourceDictionary.MergedDictionaries>

在 ResourceDictionary 内部单击,然后在“属性”窗口中选择您想要的源 在此处输入图像描述


推荐阅读