Ich habe eine Lücke, die ein Bild analysiert, extrahiert zwei dominierende Farben und ersetzt "SystemControlForegroundAccentBrush" und "SystemControlHighlightAccentBrush", die ich in App.xaml überschreiben. Es funktioniert gut, außer dass es ein wenig Zeit braucht, um das Bild zu analysieren, also ändert es die Farben, sobald alle Steuerelemente auf meiner Seite bereits geladen sind. Dadurch behalten sie die alte Akzentfarbe. Wie kann ich sie dazu bringen, dynamisch an diese ThemeRessource zu binden?Aktualisieren ThemeResources von C#?
Hier ist meine app.xaml:
<Application.Resources>
<ResourceDictionary x:Name="resdic">
<ResourceDictionary.ThemeDictionaries>
<ResourceDictionary x:Key="Dark">
<SolidColorBrush x:Key="SystemControlForegroundAccentBrush"/>
<SolidColorBrush x:Key="SystemControlHighlightAccentBrush"/>
</ResourceDictionary>
</ResourceDictionary.ThemeDictionaries>
</ResourceDictionary>
</Application.Resources>
Dies ist der (sehr vereinfacht) Teil der ColorExtractor.cs Klasse, die die Farben ändert:
public async static void Analyse()
{
Application.Current.Resources["SystemControlForegroundAccentBrush"] = new SolidColorBrush(color);
Application.Current.Resources["SystemControlHighlightAccentBrush"] = new SolidColorBrush(color2);
}
Und ich habe eine Reihe bekommt von Kontrollen in Page.xaml, die ihren Vordergrund als solche festgelegt haben:
<TextBlock Foreground="{ThemeResource SystemControlForegroundAccentBrush]"/>
ich nenne ColorExtractor.Analyse()
in meiner Page.xaml.cs (beim OnNavigatedTo-Ereignis). Ich kann immer ein Ereignis erstellen, das ausgelöst wird, sobald die Farben eingestellt sind, aber ich muss einen Weg finden, um die Farben aller Steuerelemente auf meiner Seite zu aktualisieren, wenn das erledigt ist.
Können Sie mir bitte einen Code schreiben, der mir hilft zu verstehen, was Sie tun? Sie können versuchen, eine Eigenschaft an 'ThemeResource 'zu binden und' INotifyPropertyChanged 'für diese Eigenschaft zu implementieren. –
Ich habe mein OP mit etwas Code aktualisiert. – user2950509