Я недавно "обновил" решение до 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)
До обновления,следующее изменило бы цветовую палитру пользовательского интерфейса во время выполнения:
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.