Laden...

Falls OS auf hohem Kontrast WPF Combobox nimmt Hintergrundfarbe nicht an

Erstellt von marlem vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.620 Views
M
marlem Themenstarter:in
68 Beiträge seit 2018
vor 5 Jahren
Falls OS auf hohem Kontrast WPF Combobox nimmt Hintergrundfarbe nicht an

Hallo Leute,

ich habe ein tolles Phänomen!
Wenn ich so die Hintergrundfarbe einer Combobox ändern möchte:


private void ComboboxFontname_GotFocus(Object sender, EventArgs e)
        {
            if (ChkBarrierefrei.IsChecked.Value == true)
            { //MessageBox.Show("ComboboxGotFocus" + AKTIVES_ELEMENT_CONTRAST.ToString());
                if (vHOHERKONTRAST == true)
                {
                    ComboboxFontname.Background = Brushes.Red;
                }
                else ComboboxFontname.Background = Brushes.Yellow;
            }
        }

Klappt es nicht. Es passiert einfach gar nichts.

Wenn ich hier die Hintergrundfarbe der Combobox ändere:


public MainWindow()
        {
           InitializeComponent();  
           Barrierefreiheit_setzen();
           HoherKontrast();
           Schriften_in_Combobox();
           ComboboxFontname.Background = Brushes.Red;
            gefunden = 0;
           
        }

Dann klappt es. Die Hintergrundfarbe wird rot!

Was muss ich tun, damit es in der GotFokus-Methode auch klappt?

barrierefreies Webdesign, barrierefreie Softwareentwicklung mit C#, barrierefreie Softwareentwicklung mit Java

M
marlem Themenstarter:in
68 Beiträge seit 2018
vor 5 Jahren

das Problem ist noch nicht gelöst!
Es taucht nur auf wenn im Betriebssystem hoher Kontrast aktiviert ist.

Den hohen Farbkontrast frage ich so ab:


private void HoherKontrast()
    {
        if (SystemParameters.HighContrast == true) 
        {     
            AKTIVES_ELEMENT_CONTRAST = Brushes.Red;
            NICHTAKTIVES_ELEMENT_CONTRAST = Brushes.Black;
        }
     }

Wenn der hohe Kontrast aktiv ist, setze ich so die Hintergrundfarbe so auf rot:


private void ComboboxGotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
    {
        if (ChkBarrierefrei.IsChecked.Value == true)
        {
            ComboBox source = e.Source as ComboBox;
            if (source != null)
            {
                source.Background = AKTIVES_ELEMENT_CONTRAST;
            }
        }
    }

Das Problem ist:
Die Hintergrundfarbe der Combobox wird nicht rot und die Combobox hat einen blauen Balken.

Frage:
Kann es dass ich die Combobox neu zeichnen muss?
Wenn ja, wie geht das?

barrierefreies Webdesign, barrierefreie Softwareentwicklung mit C#, barrierefreie Softwareentwicklung mit Java

5.658 Beiträge seit 2006
vor 5 Jahren

Die beiden Artikel [Artikel] MVVM und DataBinding (Abschnitte Styles und Templates) und High contrast themes sollten weiterhelfen.

Weeks of programming can save you hours of planning

M
marlem Themenstarter:in
68 Beiträge seit 2018
vor 5 Jahren

Danke!

barrierefreies Webdesign, barrierefreie Softwareentwicklung mit C#, barrierefreie Softwareentwicklung mit Java

M
marlem Themenstarter:in
68 Beiträge seit 2018
vor 5 Jahren

mein XAML kennt das hier


 <Application.Resources>

nicht, warum?

barrierefreies Webdesign, barrierefreie Softwareentwicklung mit C#, barrierefreie Softwareentwicklung mit Java

M
marlem Themenstarter:in
68 Beiträge seit 2018
vor 5 Jahren

okay, ich habe herausgefunden, dass ich das in die Datei "App.xaml" kopieren muss.

Aber wenn ich da jetzt folgenden Code hinein kopiere:


 <ResourceDictionary>
            <ResourceDictionary.ThemeDictionaries>
                <!-- Default is a fallback if a more precise theme isn't called
            out below -->
                <ResourceDictionary x:Key="Default">
                    <SolidColorBrush x:Key="BrandedPageBackgroundBrush" Color="#E6E6E6" />
                </ResourceDictionary>

                <!-- HighContrast is used in all high contrast themes -->
                <ResourceDictionary x:Key="HighContrast">
                    <SolidColorBrush x:Key="BrandedPageBackgroundBrush" Color="#E6E6E6" />
                </ResourceDictionary>
            </ResourceDictionary.ThemeDictionaries>
        </ResourceDictionary>

Dann kennt er ThemeDictionaries nicht!

Woran liegt das?

barrierefreies Webdesign, barrierefreie Softwareentwicklung mit C#, barrierefreie Softwareentwicklung mit Java

5.658 Beiträge seit 2006
vor 5 Jahren

Was genau heißt "kennt er nicht"? Wie sieht deine App.xaml aus?

Weeks of programming can save you hours of planning

4.940 Beiträge seit 2008
vor 5 Jahren

MrSparkle: Kann es sein, daß dein Link nur für UWP gilt (und nicht für WPF)?

5.658 Beiträge seit 2006
vor 5 Jahren

Da hast du wohl Recht.

Auf den Link bin ich über diesen Artikel gekommen: High Contrast in XAML. Und da ist nur von XAML die Rede. Aber wenn ich mir die Kommentare darunter anschaue, dann gilt das offenbar nicht für WPF.

Unter WPF scheint es tatsächlich etwas komplizierter zu sein. Hier gibt es einige Lösungsansätze: How can I fall back to a high contrast color in WPF?

Weeks of programming can save you hours of planning

M
marlem Themenstarter:in
68 Beiträge seit 2018
vor 5 Jahren

Hi,

stimmt. Der Link https://docs.microsoft.com/de-de/windows/uwp/design/accessibility/high-contrast-themes ist wahrscheinlich nur für uwp.
Aber es muss doch auch bei Microsoft eine Lösung für WPF geben?

Danke für den stackoverflow-Link.

barrierefreies Webdesign, barrierefreie Softwareentwicklung mit C#, barrierefreie Softwareentwicklung mit Java