我正在使用ThemeManager
provided by the ControlzEx
library来启用应用程序中主题之间的切换。
当直接在控件上设置样式属性时,这将按预期工作,例如:
MainWindow.xaml
<Window Background="{DynamicResource WhiteBrush20}">
如果我调用ThemeManager.ChangeTheme()
,窗口背景将按预期变化。
但是,如果我尝试使用相同的方法在资源字典中定义全局样式,如下所示:
控件.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="{x:Type Window}">
<Setter Property="Background"
Value="{DynamicResource WhiteBrush20}" />
</Style>
</ResourceDictionary>
当调用ThemeManager.ChangeTheme()
时,什么也没有发生。
我的App.xaml
看起来像这样:
<Application x:Class="ThemingDemoApp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ThemingDemoApp"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Resources/Controls.xaml" />
</ResourceDictionary.MergedDictionaries>
<local:ThemeProvider x:Key="{x:Static local:ThemeProvider.DefaultInstance}" />
</ResourceDictionary>
</Application.Resources>
</Application>
我已经尝试添加一个主题文件的应用程序资源最初,但这并没有什么区别。
是否可以在全局定义的样式中使用动态资源,或者我必须直接在每个控件上实现动态样式?
下面是一个repo,其中有一个最小的例子来说明它是如何不工作的:https://github.com/will-scc/ThemingDemoApp
1条答案
按热度按时间bcs8qyzn1#
Controls.xaml
中的全局窗口样式没有应用到您示例中的窗口。这与您正在使用的主题管理器无关。您应该显式设置窗口的
Style
属性,或者使用here建议的任何其他方法将Style
应用到Window
:控件.xaml: