【发布时间】:2015-05-21 06:52:22
【问题描述】:
我有一个 WPF 项目,它有 2 个主题,深色和浅色。 主题放置在我的调试中的单独文件夹中。
DarkTheme.xaml
<Style x:Key="Handle" TargetType="Grid">
<Setter Property="OverridesDefaultStyle" Value="True" />
<Setter Property="Background" Value="#FF323232" />
</Style>
<Style x:Key="Label" TargetType="Label">
<Setter Property="Foreground" Value="#FFC8C8C8" />
</Style>
LightTheme.xaml
<Style x:Key="Handle" TargetType="Grid">
<Setter Property="OverridesDefaultStyle" Value="True" />
<Setter Property="Background" Value="#FFFAFAFA" />
</Style>
<Style x:Key="Label" TargetType="Label">
<Setter Property="Foreground" Value="#FF323232" />
</Style>
然后我将主题作为 DynamicResource 应用到标签
<Label Content="TestLabel" Style="{DynamicResource Label}" Foreground="#FF323232"/>
这就是我加载它们的方式
private void ThemeChanged(object sender, SelectionChangedEventArgs e)
{
if (combo.SelectedIndex == -1) return;
foreach (var command in Directory.GetFiles(((ThemeData)combo.SelectedValue).ThemePath).Where(x => x.EndsWith(".xaml")))
{
var stream = new FileStream(command, FileMode.Open);
foreach (DictionaryEntry dictionaryEntry in (ResourceDictionary)XamlReader.Load(stream))
{
Application.Current.Resources[dictionaryEntry.Key] = dictionaryEntry.Value;
}
}
}
问题
更改主题(运行时)时标签前景不会改变,除非我将前景保留为空。但我不能在设计中将所有内容都留空(因为我无法使用空白屏幕)
那么如何让主题覆盖样式呢?或者我可以制作一个占位符样式?
【问题讨论】:
-
顶,真的需要这个回答