2017-02-24 16 views
2

MahAppsの色とブラシのリソースを使用するようにアプリケーションを変換しています。プログラムのテーマ/アクセントをプログラムで変更できるようになりました。新しいアクセントの色とブラシの追加(MahApps)

非常に薄いアクセントのある背景色が必要です(数十の場所やさまざまな種類のコントロールで使用されます)が、最も柔らかいMahAppsの色( "AccentColor4")は十分に軽いものではありません。 MahAppsライブラリを変更するのは短く、現在のMahAppsのアクセントに基づいて色を変更することができるアプリケーションで、追加のColorおよびBrushリソースを作成する方法はありますか?

+0

私は同様の質問[ここ](http://stackoverflow.com/questions/36147698/how-to-create-a-custom-accent-in-mahapps-metro/36169095#36169095)に答えました。 – jsanalytics

+0

@jstreetなので、既存のMahAppsのアクセントをコピーして新しいアクセントを作成し、新しい色を追加する必要がありますか?それは残念です - 私はちょうど1つの特定の色のより軽いバージョンが必要なので、何とかそれを継承または上書きする巧妙な方法があることを望んでいた、または不透明度を変更します。私は私のデザインについて考え直すだろう... –

答えて

1

あなたのケースでは、AccentColor4の値に基づいてAccent(おそらくAccentColor5?)に新しいキーを追加すると思います。

Hereあなたは(CreateAppStyleByメソッドを参照してください)AccentColor4からAccentColor5を計算に役立つかもしれないpunker76によって作られたThemeManagerHelperクラスを、見つけることができます。 - キーを現在のAccentにアプリケーションの

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追加(それがすでに存在する場合または交換)します:

私はまた、あなたの人生を容易にするべ​​きである、これを作りました。 changeAccentImmediatelyがtrueに設定されている

場合は、新しいファイルを作成し、新しいAccent(挿入と/置き換えキー)を保存し、アプリケーション

TIPためAccentとして設定:あなたが追加することができます/あなたが望むすべてのキーを置き換え、changeAccentImmediatelyをtrueに設定するのは最後のものだけです(これによりパフォーマンスが向上します)。

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に追加するのを忘れた場合、それはその型のデフォルト値を使用しますので、予めご了承ください

はこのようにそれを使用します。

幸運を祈る!

+0

賢いもの!私はすぐにそれを試してみましょう... –

+0

ありがとう!何か問題があれば教えてください:) –

関連する問題