【发布时间】:2019-01-27 19:47:47
【问题描述】:
我最近将解决方案“升级”到 VS2017 和 .NET Framework 4.6.1。
我还将所有 NuGet 包更新到最新版本。
这个问题可能涉及以下一个或多个包(括号中是以前的版本):
MahApps.Metro by Jan Karger et al. 1.6.5 (1.3.0-ALPHA016)
MaterialDesignColors by James Willock 1.1.3 (1.1.2)
MaterialDesignThemes by James Willock 2.5.0.1205 (1.1.0.234)
MaterialDesignThemes.MahApps by James Willock 0.0.12 (0.0.3)
还被引用的 WPF 相关包包括:
Extended.Wpf.Toolkit by Xceed 3.4.0 (2.6.0)
ControlzEx by Jan Karger et al. 3.0.2.4 (none, new dependency of MahApps.Metro)
在更新之前,以下内容会在运行时更改 UI 调色板:
private void primaryPaletteComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
paletteHelper.ReplacePrimaryColor(this.primaryPaletteComboBox.Text);
}
/* Where: */
var paletteHelper = new MaterialDesignThemes.Wpf.PaletteHelper();
this.primaryPaletteComboBox.Items.AddRange(new object[] {
"Amber",
"Blue",
"BlueGrey",
"Brown",
"Cyan",
"DeepOrange",
"DeepPurple",
"Green",
"Grey",
"Indigo",
"LightBlue",
"LightGreen",
"Lime",
"Orange",
"Pink",
"Purple",
"Red",
"Teal",
"Yellow"});
...超级简单,超级容易。
更新后,ReplacePrimaryColor 抛出如下异常:
System.InvalidOperationException: '无法安全地确定单个 SecondaryAccentBrush 的资源定义。'
将这些软件包降级到以前的版本会导致其他问题。
如何在这些软件包的最新版本中在运行时更改调色板?
我想通过简单地使用用户从 ComboBox 中选择的调色板名称来做到这一点。
显然SecondaryAccentBrush 是个问题。
有人知道过去几年发生了什么变化吗?
这应该很容易,但 Google 并没有给我任何有用的信息。也许我没有问正确的问题。
PaletteHelper 现在提供了一个看起来很有前途的ReplacePalette(Palette palette) 方法,也许有一种方法可以通过使用预定义资源的名称来实例化 Palette 对象?
我宁愿同时去看牙医和直肠科医师,也不愿乱用 XAML 资源定义。
【问题讨论】:
标签: c# wpf mahapps.metro material-design-in-xaml