天道酬勤,学无止境

在图书馆项目中链接 ThemeDictionaries(Linking ThemeDictionaries in Library Project)

问题

我在名为Light.xamlDark.xaml Themes文件夹中创建了 2 个ResourceDictionary /theme 文件。

在两个文件中添加了名称为BgColor SolidColorBrush

<SolidColorBrush x:Name="BgColor" Color="Silver" /> // 在 Light.xaml 中

<SolidColorBrush x:Name="BgColor" Color="WhiteSmoke" /> // 在 Dark.xaml 中

Application类型项目中,我可以在App.xaml添加以下 XAML 代码,以便我可以在我的UserControl引用此资源:

<Application>
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.ThemeDictionaries>
                <ResourceDictionary x:Key="Dark" Source="Themes/Dark.xaml" />
                <ResourceDictionary x:Key="Light" Source="Themes/Light.xaml"/>
            </ResourceDictionary.ThemeDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

由于这是Library Project ,因此我的项目中没有App.xaml

那么如何链接这个ThemeDictionaries以便我可以在Library Project UserControl中使用它?

回答1

那么如何链接这个 ThemeDictionaries 以便我可以在我的 UserControl 中使用它?

您可以在App.xaml引用资源字典,如下所示:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.ThemeDictionaries>
            <ResourceDictionary x:Key="Dark" Source="ms-appx:///MyThemeLibrary/Themes/Dark.xaml"/>
            <ResourceDictionary x:Key="Light" Source="ms-appx:///MyThemeLibrary/Themes/Light.xaml"/>
        </ResourceDictionary.ThemeDictionaries>
    </ResourceDictionary>
</Application.Resources>

MyThemeLibraryMyThemeLibrary的引用名称。 之后,您可以使用您在Dark.xamlLight.xaml定义的主题,如下所示:

<UserControl
    ...
    d:DesignHeight="300"
    d:DesignWidth="400">

    <Grid Background="{ThemeResource BgColor}">
    </Grid>
</UserControl>
标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Linking ThemeDictionaries in Library Project
    I created 2 ResourceDictionary/theme files in Themes folder named Light.xaml and Dark.xaml. Added SolidColorBrush with name BgColor in both files : <SolidColorBrush x:Name="BgColor" Color="Silver" /> // in Light.xaml <SolidColorBrush x:Name="BgColor" Color="WhiteSmoke" /> // in Dark.xaml In Application type project, I can add below XAML code in App.xaml so I can reference this resource in my UserControl : <Application> <Application.Resources> <ResourceDictionary> <ResourceDictionary.ThemeDictionaries> <ResourceDictionary x:Key="Dark" Source="Themes/Dark.xaml" /> <ResourceDictionary x:Key=
  • 在Windows 10 UWP中更改口音颜色(Change Accent Color in Windows 10 UWP)
    问题 我真的不想使用用户在Windows的应用程序中选择的强调色,而是想要显示自己的颜色。 我可以通过制作新样式来在所有项目上手动更改它,但是它在普通控件中的很多地方都可以在应用程序级别执行。 我尝试设置<SolidColorBrush x:Key="SystemAccentColor" Color="#FFCB2128" />但是由于某些原因,它不会注意到某些项目,而会使诸如视频控件之类的其他项目变成灰色。 回答1 在Win10 UWP上,系统强调颜色定义为ThemeResource SystemControlHighlightAccentBrush 。 您可以按以下方式覆盖它。 <ResourceDictionary.ThemeDictionaries> <ResourceDictionary x:Key="Default"> <SolidColorBrush x:Key="SystemControlHighlightAccentBrush" Color="Orange" /> </ResourceDictionary> <ResourceDictionary x:Key="Dark"> <SolidColorBrush x:Key="SystemControlHighlightAccentBrush" Color="Green" /> </ResourceDictionary
  • 覆盖页面范围内的主题资源(Override theme resource in the scope of a Page)
    问题 我想在特定页面的范围内覆盖主题资源,特别是SystemAccentColor 。 我已经在广泛的应用范围内成功地做到了。 但我无法为特定页面执行此操作。 App.xaml 中的 XAML(这很好用) <Application.Resources> <ResourceDictionary> <ResourceDictionary.ThemeDictionaries> <ResourceDictionary x:Key="Default"> <Color x:Key="SystemAccentColor">#862E2D</Color> <SolidColorBrush x:Key="SystemControlHighlightAccentBrush" Color="Black"/> </ResourceDictionary> </ResourceDictionary.ThemeDictionaries> </ResourceDictionary> </Application.Resources> Page.xaml XAML(这不起作用) <Page.Resources> <ResourceDictionary> <ResourceDictionary.ThemeDictionaries> <ResourceDictionary x:Key="Default"> <Color
  • 如何更改特定元素而非全局元素的 TextBox 占位符文本颜色(How to change TextBox placeholder text color for a specific element, not global)
    问题 MSDN 在此处列出了TextBox类的样式和模板。 我可以通过在App.xaml创建一个ResourceDictionary来覆盖这些主题资源,如下所示: <Application.Resources> <ResourceDictionary> <ResourceDictionary.ThemeDictionaries> <ResourceDictionary x:Key="Default"> <SolidColorBrush x:Key="TextBoxPlaceholderTextThemeBrush" Color="Yellow"/> </ResourceDictionary> </ResourceDictionary.ThemeDictionaries> </ResourceDictionary> </Application.Resources> 但这会影响我的应用程序中的每个TextBox 。 如何仅为特定元素设置此主题? 我试过把这本字典放在Page.Resources ,甚至是TextBox.Resources中,我想应用它的TextBox ,但它不起作用。 我真的不想为了改变这个属性而重新定义Template 。 编辑Heena 的答案很接近,但我还想为浅色和深色主题设置不同的颜色,因为我的文本框具有透明的背景色。 我设法通过将Foreground="
  • 在 Windows 8.1 应用程序中更改全局应用程序字体(Change global application font in a Windows 8.1 app)
    问题 网上有很多关于如何嵌入自定义字体、创建字体样式并将它们应用到控件的文章。 但是如何覆盖全局应用程序字体,以便每个控件都使用该字体,而不是为每个控件手动设置 FontFamily 属性。 就我而言,我不希望使用自定义字体作为全局字体,而是使用系统字体,例如 Tahoma 或 Calibri。 回答1 在 winrt 中,所有控件的默认字体系列 ContentPresenter 是Segoe Ui ,其键是ContentControlThemeFontFamily 。 -*您可以更改或覆盖资源字典中按钮、组合框项、列表框项等的字体系列,因为它们具有模板属性(contenpresenter 或 itempresenter) 1) 转到 StandardStyles.xaml 2) 在 ThemeDictionaries 的默认和高对比度资源字典中添加<FontFamily x:Key="ContentControlThemeFontFamily">Tahoma</FontFamily> ,如下所示。 <ResourceDictionary.ThemeDictionaries> <ResourceDictionary x:Key="Default"> <x:String x:Key="BackButtonGlyph"></x:String> <x:String x:Key=
  • Override theme resource in the scope of a Page
    I want to override a theme resource, specifically the SystemAccentColor, in the scope of a specific page. I have successfully done it in application wide scope. But I can't do it for a specific page. XAML in App.xaml (this works fine) <Application.Resources> <ResourceDictionary> <ResourceDictionary.ThemeDictionaries> <ResourceDictionary x:Key="Default"> <Color x:Key="SystemAccentColor">#862E2D</Color> <SolidColorBrush x:Key="SystemControlHighlightAccentBrush" Color="Black"/> </ResourceDictionary> </ResourceDictionary.ThemeDictionaries> </ResourceDictionary> </Application.Resources> XAML in
  • How to change TextBox placeholder text color for a specific element, not global
    MSDN lists the styles and templates for the TextBox class here. I can override these theme resources by creating a ResourceDictionary in App.xaml like this: <Application.Resources> <ResourceDictionary> <ResourceDictionary.ThemeDictionaries> <ResourceDictionary x:Key="Default"> <SolidColorBrush x:Key="TextBoxPlaceholderTextThemeBrush" Color="Yellow"/> </ResourceDictionary> </ResourceDictionary.ThemeDictionaries> </ResourceDictionary> </Application.Resources> but this will affect every TextBox in my app. How can I set this theme for only a specific element? I've tried putting this dictionary in
  • x:Static 扩展在 WinRT-XAML 中工作吗?(Do x:Static extensions work in WinRT-XAML?)
    问题 编辑:这是本主题的继续:为选定的 Listview 项目 2 禁用蓝色边框 我想在 Windows 8.1 的应用程序中执行此操作: <ListView x:Name="gui_listView" HorizontalAlignment="Left" Height="610" Margin="48,54,0,0" VerticalAlignment="Top" Width="256" SelectionChanged="gui_listView_SelectionChanged" SelectionMode="Extended"> <ListView.Resources> <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/> </ListView.Resources> </ListView> 但微软可能终止了对静态扩展的支持。 有人知道我现在应该做什么吗? 有错误的图片,我得到了什么。 http://imagizer.imageshack.us/a/img835/4764/jlcc9.jpg 感谢您的任何回应。 回答1 事实是x:Static并没有停止工作,它从未在 Windows 运行时中工作过。 所有绑定都针对 Windows 运行时中的实例对象。
  • 如何以编程方式检查Windows Phone 8.1中当前设置的主题?(How to programatically check currently set theme in Windows Phone 8.1?)
    问题 我想检查用户是否设置了浅色或深色主题。 是否可以在Windows Phone 8.1(商店应用)中以编程方式执行此操作。 回答1 在MSDN上,您将找到示例代码,可以通过比较资源来确定当前主题。 例如: private bool IsDarkTheme() { return (double)Application.Current.Resources["PhoneDarkThemeOpacity"] > 0; } 但是-我在WP8.1 Runtime上运行上述代码时遇到了一些问题-它找不到所需的密钥。 事实证明,以上代码仅适用于WP8.1 Silverlight(也适用于WP8.0)。 但是(再次),定义您自己的ThemeResource并检查其状态的过程没有任何障碍: 在app.xaml中-定义一些ThemeResources : <Application.Resources> <ResourceDictionary> <ResourceDictionary.ThemeDictionaries> <ResourceDictionary x:Key="Light"> <x:Boolean x:Key="IsDarkTheme">false</x:Boolean> </ResourceDictionary> <ResourceDictionary x:Key="Dark"> <x
  • 深色/浅色主题资产限定符(Dark/Light theme assets qualifiers)
    问题 我有一个非常简单的要求来使用 Light/Dark 主题图像。 我希望像这样的预选赛 SomeImage.Theme-Light.png 或将图像放在名为 Theme-Light 的文件夹下 Theme-Light/SomeImage.png 会起作用,并且确实起作用,但仅限于设计器模式。 一旦我运行应用程序,即使正确设置了所需的主题(在应用程序和页面级别,因此所有其他 ThemeResources 都能正确加载),也会加载错误的图像。 我知道为不同主题加载不同图像的解决方法,所以这不是我想要的。 我很想知道为什么这种带有限定符的方法在运行时不起作用? 是否应该使用不同的名称限定符? 我阅读了这篇文章:“如何使用限定符 (XAML) 命名资源”,但它仅展示了如何根据高对比度支持命名资产。 回答1 这种方法不如限定符方便,但它有效。 在 App.xaml 中定义 <ResourceDictionary> <ResourceDictionary.ThemeDictionaries> <ResourceDictionary x:Key="Light"> <ImageSource x:Key="Logo">/Assets/Logo-White.png</ImageSource> </ResourceDictionary> <ResourceDictionary x:Key="Dark
  • 如何覆盖 ContentControlThemeFontFamily(How to override ContentControlThemeFontFamily)
    问题 是否可以在standardstyles.xaml 的WinRt 应用程序中为ContentControlThemeFontFamily 设置自定义字体? 你有什么例子吗? 回答1 创建您自己的资源字典并覆盖主题。 <ResourceDictionary.ThemeDictionaries> <ResourceDictionary x:Key="Default"> <FontFamily x:Key="ContentControlThemeFontFamily">Times new roman</FontFamily> </ResourceDictionary> </ResourceDictionary.ThemeDictionaries>
  • 如何在代码 (UWP) 中更改 Xaml 资源中的颜色定义(How to change Color define in Xaml Resources in code (UWP))
    问题 [UWP] 我有很多来自 App.xaml 的带有颜色绑定的网格 MainPage.xaml ... <Grid Height="45" Margin="0,0,0,10" Background="{ThemeResource MyColor}"> 应用程序.xaml <Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" RequestedTheme="Dark"> <Application.Resources> <ResourceDictionary> <SolidColorBrush x:Key="MyColor">#FFFFFF</SolidColorBrush> 然后我想改变它的所有,在这样的代码中 Application.Current.Resources["MyColor"] = new SolidColorBrush(Windows.UI.Color.FromArgb(255, 242, 101, 34)); 但它不起作用。 我可以错过什么吗? 当我导航到另一个页面并返回时,上面的代码抛出 System.Exception 回答1 像 WPF
  • 如何更改 Xamarin.Forms UWP 应用程序的强调色?(How do I change the accent colour of a Xamarin.Forms UWP application?)
    问题 我正在开发Xamarin.Forms UWP 应用程序。 我正在努力设置我的应用程序的强调色。 这是控件上默认用于某些行为的颜色。 例如,Entry 控件在焦点上有一个默认的蓝色突出显示,如下所示: 我从这个线程中尝试了一些建议:在 Windows 10 UWP 中更改重点颜色但似乎没有任何效果。 我不确定是否是因为我没有完全理解 Xamarin.UWP 的 UWP 颜色更改有何不同,或者我尝试做的事情是否甚至可以使用 Xamarin.Forms。 有没有人发现如何做到这一点? 回答1 下面是 UWP 的 FormsTextBox 的样式代码。 您需要覆盖以下样式颜色: <Setter Property="Foreground" Value="{ThemeResource SystemControlForegroundBaseHighBrush}" /> <Setter Property="Background" Value="{ThemeResource SystemControlBackgroundAltHighBrush}" /> <Setter Property="BackgroundFocusBrush" Value="{ThemeResource SystemControlBackgroundChromeWhiteBrush}" /> <Setter
  • 如何更改 ContentDialog uwp 的背景叠加(How to change background overlay of ContentDialog uwp)
    问题 我正在使用 VS2015 开发 UWP Win10 App。 我正在使用 ContenDialog 来显示模态窗口/弹出窗口。 我需要更改 ContentDialog 的背景叠加颜色。 这该怎么做。 即使在内部样式中也没有选项/属性。 我需要将 Overlay White Dim 颜色更改为其他颜色,例如 Blackish overlay/dim color 等... 看图。 回答1 我认为您需要自定义使用控件才能更好地控制背景。 默认的ContenDialog提供非常简单的设置,并且对按钮/内容的数量有限制。 回答2 要设置的关键资源是SystemControlPageBackgroundMediumAltMediumBrush 我使用以下主题定义来定位我的应用程序中的所有 ContentDialogs: <!-- override the Dialog Background --> <ResourceDictionary.ThemeDictionaries> <ResourceDictionary x:Key="Default"> <SolidColorBrush x:Key="ContentDialogDimmingThemeBrush" Color="#99FFFFFF" /> <SolidColorBrush x:Key=
  • 为ContentDialog配置覆盖背景色(Configuring overlay background colour for ContentDialog)
    问题 我正在使用深色主题为通用Windows平台编写一个应用程序,但我注意到,尽管当我使用ContentDialog类显示模式对话框时,已将请求的主题正确设置为深色,但叠加层会使整个页面变亮,而不是使它变暗。 在显示对话框之前: 显示对话框: 由于ContentDialog用于控制叠加层的属性,如何覆盖使用的颜色? 回答1 经过一些实验后,我发现用来控制上方显示ContentDialog的叠加层颜色的画笔是SystemControlPageBackgroundBaseMediumBrush而不是看起来更像ContentDialogDimmingThemeBrush 。 通过检查默认主题定义,可以发现浅色和深色主题均将此笔刷设置为颜色资源SystemBaseMediumColor ,其在浅色主题上为#99000000 ,在深色主题上为#99FFFFFF 。 这会导致覆盖变暗,使亮色主题变暗,使暗色主题变亮。 由于SystemBaseMediumColor是其他笔刷定义(例如用于非活动透视图标题的笔刷定义)的引用,因此有必要重写SystemControlPageBackgroundBaseMediumBrush而不是它仅针对深色主题引用的颜色。 为此,我们需要在App.xaml的资源主题字典中或在合并到App.xaml的资源XAML文件中重新定义笔刷,方法如下:
  • 覆盖主题画笔 Windows 10 UWP(Override theme brush Windows 10 UWP)
    问题 我正在尝试覆盖 Windows 10 中的一些样式颜色,但我无法让它工作。 我的 app.xaml 看起来像这样: <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="Resources.xaml"/> </ResourceDictionary.MergedDictionaries> <ResourceDictionary.ThemeDictionaries> <ResourceDictionary x:Key="Default" Source="Theme.xaml"/> </ResourceDictionary.ThemeDictionaries> </ResourceDictionary> </Application.Resources> 我的 Theme.xaml 看起来像这样 <ResourceDictionary x:Key="Default" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <SolidColorBrush x:Key=
  • Override theme brush Windows 10 UWP
    I'm trying to override some style-colors in Windows 10 but I cannot get it to work. My app.xaml looks like this: <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="Resources.xaml"/> </ResourceDictionary.MergedDictionaries> <ResourceDictionary.ThemeDictionaries> <ResourceDictionary x:Key="Default" Source="Theme.xaml"/> </ResourceDictionary.ThemeDictionaries> </ResourceDictionary> </Application.Resources> And my Theme.xaml looks like this <ResourceDictionary x:Key="Default" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http:/
  • 如何检测 Windows 10 亮/暗模式?(How can I detect Windows 10 light/dark mode?)
    问题 我正在使用Windows.UI.ViewManagement.UISettings来获取系统强调色,但这个类似乎没有任何用于亮/暗模式的方法或属性。 我未能找到有关此功能的文档,如何检测? PS:我正在制作一个无法访问Windows.UI.Xaml命名空间的 JS 应用程序。 回答1 我找到了一个更简单的解决方案,它也应该适用于 JavaScript 应用程序,而不需要 Windows 运行时组件 - UISettings 类: var uiSettings = new Windows.UI.ViewManagement.UISettings(); var color = uiSettings.getColorValue( Windows.UI.ViewManagement.UIColorType.background ); 你得到的颜色是暗的主题黑色或白色光的主题。 该类还有非常有用的事件ColorValuesChanged ,您可以使用它在运行时观察主题更改。 回答2 你可以在你的解决方案中创建一个 Windows 运行时组件项目,从那里你访问Windows.UI.Xaml命名空间。 添加一个方法来检查当前的 ApplicationTheme 。 public sealed class Test { public static string CurrentTheme()
  • UWP 按钮在鼠标悬停时更改颜色(UWP Button Changes Colors when Mouse hovers over)
    问题 我正在尝试创建一个 UWP 按钮,当鼠标指针悬停在它上面时,它会改变背景颜色。 我遇到的问题是,默认情况下,它似乎已经这样做了,但不是我想要的颜色。 当我将鼠标悬停在我的红色按钮上时,它会变为默认的灰色,然后在我移开鼠标时返回。 我用 C# 编写了代码,试图让它在我悬停在它上面时变成蓝色 private void button_PointerEntered_1(object sender, PointerRoutedEventArgs e) { button.Background = new SolidColorBrush(Windows.UI.Color.FromArgb(255, 0, 0, 255)); } private void button_PointerExited_1(object sender, PointerRoutedEventArgs e) { button.Background = new SolidColorBrush(Windows.UI.Color.FromArgb(255, 255, 0, 0)); } 下面是按钮的 XAML 代码 <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <Button x:Name="button" Content=
  • 链接失败 [ilink32 错误] 致命:无法打开文件“TYPES.OBJ”(Linking fails [ilink32 Error] Fatal: Unable to open file 'TYPES.OBJ')
    问题 我一直在使用C++ Builder 2010更新旧的遗留项目构建的代码,以便使用C++ Builder 10 Seattle进行编译。 我主要不得不改变路径,很多dupIgnore到TDuplicates::dupIgnore ,重新导入一些组件,如MSXML和MSMQ等。 首先是主项目以 bpl 和 dll 的形式使用的一堆子项目,最后是主项目的代码编译。 但是......它无法链接:P [ilink32 Error] Fatal: Unable to open file 'TYPES.OBJ' 我试图找到有关潜在问题的信息,许多人提到确保在Delphi 编译器设置下的Unit Scope 中提供System 。 但是这个项目已经存在了。 还有什么可能导致这种情况? 信息。 现在使用“经典”bcc32 编译器编译。 包含路径: $(BDSINCLUDE)\windows\vcl;$(BDSINCLUDE)\dinkumware; 图书馆路径: $(BDSLIB)\$(PLATFORM)\$(Config);$(BDSLIB)\$(PLATFORM)\Release\psdk; 回答1 我认为你应该在你的项目中的所有文件中找到字符串 TYPES.OBJ,在你需要从找到的文件中删除这个字符串之后。 在此之前不要忘记备份项目目录。 当我将旧项目从 BCB5 转换为 BCB 6 时