我正在将应用程序转换为使用MahApps颜色和笔刷资源,以允许我们以编程方式更改应用程序主题/口音。添加新的口音颜色和笔刷(MahApps)
我需要一个非常苍白的重音背景颜色(这将在几十个地方和不同类型的控制中使用),但最差的MahApps颜色(“AccentColor4”)不够轻。在修改MahApps库的时候,有没有什么办法在我的应用程序中创建额外的Color和Brush资源,以某种方式根据当前的MahApps口音来改变它们的颜色?
我正在将应用程序转换为使用MahApps颜色和笔刷资源,以允许我们以编程方式更改应用程序主题/口音。添加新的口音颜色和笔刷(MahApps)
我需要一个非常苍白的重音背景颜色(这将在几十个地方和不同类型的控制中使用),但最差的MahApps颜色(“AccentColor4”)不够轻。在修改MahApps库的时候,有没有什么办法在我的应用程序中创建额外的Color和Brush资源,以某种方式根据当前的MahApps口音来改变它们的颜色?
对于您的情况,我想我会根据AccentColor4
值为我的Accent
(也许是AccentColor5
?)添加一个新密钥。
Here你可以找到一个ThemeManagerHelper
类由punker76提出,这可能会帮助你计算从AccentColor4
AccentColor5
(见CreateAppStyleBy
方法)。
我也做了这一点,这应该让你的生活更轻松:
private void AddKeyForCurrentAccent(object key, object value, bool changeAccentImmediately = false)
{
Tuple<MahApps.Metro.AppTheme, MahApps.Metro.Accent> currentAppStyle = MahApps.Metro.ThemeManager.DetectAppStyle(Application.Current);
if(currentAppStyle.Item2.Resources.Contains(key))
{
currentAppStyle.Item2.Resources.Remove(key);
}
currentAppStyle.Item2.Resources.Add(key, value);
if(changeAccentImmediately)
{
var accentName = string.Format("CustomTheme.xaml");
CreateAccentFrom(accentName, currentAppStyle.Item2.Resources);
MahApps.Metro.ThemeManager.ChangeAppStyle(Application.Current, MahApps.Metro.ThemeManager.GetAccent(accentName), currentAppStyle.Item1);
}
}
private void CreateAccentFrom(string accentName, ResourceDictionary resourceDictionary)
{
var fileName = System.IO.Path.Combine(System.IO.Path.GetTempPath(), accentName);
using (var writer = System.Xml.XmlWriter.Create(fileName, new System.Xml.XmlWriterSettings { Indent = true }))
{
System.Windows.Markup.XamlWriter.Save(resourceDictionary, writer);
writer.Close();
}
resourceDictionary = new ResourceDictionary() { Source = new Uri(fileName, UriKind.Absolute) };
var newAccent = new MahApps.Metro.Accent { Name = accentName, Resources = resourceDictionary };
MahApps.Metro.ThemeManager.AddAccent(accentName, newAccent.Resources.Source);
}
AddKeyForCurrentAccent
将增加(或更换 - 如果它已经存在)的关键在当前Accent
的应用。
如果changeAccentImmediately
设置为true,它会创建一个新的文件,并保存新的Accent
(与插入/替换键),并将其设置为Accent
的应用
提示:您可以添加/替换所有你想要的密钥,并将changeAccentImmediately
设置为只在最后一个(这应该提高性能)为真。
使用方法如下:
AddKeyForCurrentAccent("AccentColor5", Brushes.Pink); // Does not replace the accent immediately (so changes are not visible) - works faster
// AND/OR
AddKeyForCurrentAccent("AccentColor5", Brushes.HotPink, true); // Will update the UI
重要提示:请注意,如果您使用自定义键,你忘了将它添加到您的Accent
,它会使用默认值,为该类型。
祝你好运!
聪明的东西!我马上试一下... –
谢谢你!如果您有任何问题,请让我知道:) –
我回答了类似的问题[这里](http://stackoverflow.com/questions/36147698/how-to-create-a-custom-accent-in-mahapps-metro/36169095#36169095)。 – jsanalytics
@jstreet所以我将不得不通过复制现有的MahApps口音创建新的口音,然后添加我的新颜色?这是一个耻辱 - 我只需要一个特定颜色的较轻版本,所以希望有一个聪明的方式来以某种方式继承或覆盖它,或改变其不透明度。我将重新思考我的设计...... –