我正在將應用程序轉換爲使用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口音創建新的口音,然後添加我的新顏色?這是一個恥辱 - 我只需要一個特定顏色的較輕版本,所以希望有一個聰明的方式來以某種方式繼承或覆蓋它,或改變其不透明度。我將重新思考我的設計...... –