none
Hintergrundfarbe ändern einer Combobox im hohen Kontrastmodus RRS feed

  • Frage

  • Hallo,

    wenn im Betriebssystem Windows der hohe Kontrastmodus (Einstellungen -> Erleichterte Bedienung -> Hoher Kontrast) eingestellt ist, sollen meine Bedienelemente eine rote Hintergrundfarbe haben und eine weise Schrift.

    Bei den Eingabefeldern funktioniert das, aber bei den Comboboxen nicht.

    Was kann ich tun, damit die Comboboxen im hohen Kontrastmodus auch die Hintergrundfarbe rot bekommen?


    Dienstag, 12. Februar 2019 15:35

Alle Antworten

  • Hi Markus,
    welchen Bereich der ComboBoxes meinst Du? TextBox oder Items der aufgeklappten Listen?

    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP für Developer Technologies)
    Meine Homepage mit Tipps und Tricks

    Dienstag, 12. Februar 2019 17:47
  • Hallo Peter,

    die Hintergrundfarbe wenn die Combobox NICHT aufgeklappt ist.

    Ich wollte ein Screenshot hochladen aber das darf ich noch nicht, weil ich noch zu neu bin!

    Dienstag, 12. Februar 2019 18:13
  • Hi Markus,
    schau die mal den Style an. Nicht alle dort genutzten Farben sind bei "Hoher Kontrast" einstellbar. Du müsstest deshalb einen eigen Style erstellen.

    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP für Developer Technologies)
    Meine Homepage mit Tipps und Tricks

    Dienstag, 12. Februar 2019 18:47
  • Vielen Dank Peter!
    Mittwoch, 13. Februar 2019 10:42
  • Hallo Peter,

    ich habe jetzt diesen Style erstellt:

    <Style x:Key="CBXSchriftHintergrundHoherKontrast" TargetType="{x:Type ComboBoxItem}">
                <Setter Property="Background" Value="Red"/>
            </Style>

    Den kann ich jetzt aber nicht in XAML zuweisen, weil ich abfragen muss ob der hohe Kontrast gesetzt ist.

    Wie gehe ich weiter vor?

    Donnerstag, 14. Februar 2019 08:45
  • Hi Markus,
    hast Du es mal mit SystemParameters.HighContrastKey versucht? Siehe hier.

        <Style x:Key="CBXSchriftHintergrundHoherKontrast" TargetType="{x:Type ComboBoxItem}">
            <Setter Property="Tag" Value="{DynamicResource {x:Static SystemParameters.HighContrastKey}}" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding RelativeSource= {x:Static RelativeSource.Self}, Path=Tag}" Value="True">
                    <Setter Property="Background" Value="Red"/>
                </DataTrigger>
                <DataTrigger Binding="{Binding RelativeSource= {x:Static RelativeSource.Self},  Path=Tag}" Value="False">
      <Setter Property="Background" Value="White"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP für Developer Technologies)
    Meine Homepage mit Tipps und Tricks

    • Als Antwort vorgeschlagen perlfred Samstag, 16. Februar 2019 06:31
    Donnerstag, 14. Februar 2019 09:03
  • Vielen Dank Peter.

    Dein Code compiliert, aber leider ändert sich die Hintergrundfarbe nicht im hohen Kontrastmodus. 

    Donnerstag, 14. Februar 2019 14:18
  • Hallo Peter!

    Dein interessanter Trigger funktioniert schon.

    1. Habe ich den Style mal auf eine ComboBox (nicht ComboBoxItem) gesetzt (da funktioniert er auch, aber man sieht es aber erst beim Aufklappen der Combobox und muss noch einen anderen Eintrag selektieren, damit nicht die Farbe eines selektierten Item "angezogen" wird) und

    2. einen Tipp für Markus, er sollte mal kontrollieren, ob er den Style überhaupt der ComboBox zugeordnet hat.

    <Window x:Name="wnd" x:Class="BDG.Window2"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="async / await" Height="130" Width="350" WindowStartupLocation="CenterScreen">
        <Window.Resources>
            <Style x:Key="cboSchriftHintergrundHoherKontrast" TargetType="{x:Type ComboBox}">
                <Setter Property="Tag" Value="{DynamicResource {x:Static SystemParameters.HighContrastKey}}" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding RelativeSource= {x:Static RelativeSource.Self}, Path=Tag}" Value="True">
                        <Setter Property="Background" Value="Red"/>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding RelativeSource= {x:Static RelativeSource.Self},  Path=Tag}" Value="False">
                        <Setter Property="Background" Value="White"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Window.Resources>
    
    
    …
    
            <ComboBox SelectedIndex="0" Style="{StaticResource cboSchriftHintergrundHoherKontrast}">
                <ComboBoxItem Content="Eintrag 1" />
                <ComboBoxItem Content="Eintrag 2" />
            </ComboBox>
    

    Hoher Kontrast aus:

    Hoher Kontrast ein:

       


    • Bearbeitet perlfred Samstag, 16. Februar 2019 06:36 Konkretisierung
    Samstag, 16. Februar 2019 06:31
  • Hi Fred,
    schau Dir Deine Lösung mal genau an. Der Hintergrund ist Rot, solange kein Focus auf der Combobox liegt. Markus möchte aber, dass beim Focus der Hintergrund die Farbe wie gewünscht bekommt.


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP für Developer Technologies)
    Meine Homepage mit Tipps und Tricks

    Samstag, 16. Februar 2019 09:07