none
ausgewähltes Item in einer Listview mit einer Hintergrundfarbe belegen RRS feed

  • Frage

  • Hallo,

    Ich versuche mich gerade mit Triggern. Bei einer Listview möchte ich die Hintergrundfarbe (Background-Eigenschaft?) des Auswahl-Balkens bzw. der Auswahl selbst ändern. In meinem Code wird aber nur die Farbe des Textes geändert. Wie muss ich die es machen, um auch die Hintergrundfarbe der Auswahl zu ändern? Ich habe auch mal mit der Condition Property "IsMouseOver" versucht eine Wirkung zu erzielen. Aber keine Chance. Der Auswahl-Balken bleibt in der hellblauen vordefinierten Farbe.

    <StackPanel>
      <ListView>

        <ListView.Resources>

          <StyleTargetType="ListViewItem">

            <Style.Triggers>

              <MultiTrigger>

                <MultiTrigger.Conditions>

                  <ConditionProperty="IsSelected"Value="True" />

                </MultiTrigger.Conditions>

                <MultiTrigger.Setters>

                  <SetterProperty="Foreground"Value="Orange"/>

                  <SetterProperty="Background"Value="Brown" />

                </MultiTrigger.Setters>

              </MultiTrigger>

         </Style.Triggers>

       </Style>

    </ListView.Resources>

    <ListViewItemContent="Item1"/>

    <ListViewItemContent="Item2"/>

    <ListViewItemContent="Item3"/>

    </ListView>

    </StackPanel>

    Gruß Andreas

    Samstag, 15. August 2015 12:06

Antworten

Alle Antworten

  • Hallo Andreas,

    das Template des ListViewItems enthält weitere Trigger die die Farben überschreiben, je nach Zustand den das Element hat. Sobald einer dieser Trigger greift, funktionieren von außen angebrachte Trigger nicht mehr. Du wirst daher das Template überschreiben müssen.

    Du kannst dafür in Visual Studio ein ListViewItem in Designer markieren und dann im Kontextmenü Vorlage bearbeiten > Kopie bearbeiten wählen. Dadurch wird das Template in deinem XAML generiert und du kannst es nach belieben anpassen.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Samstag, 15. August 2015 15:48
    Moderator
  • Hallo Tom,

    vielen Dank für die Antwort. Hat genauso funktioniert.

    Mein nächstes Problem ist jetzt, dass ich die jeweilige Auswahl eines ListViewItems in einer selbstdefinierten Variable: public bool Ausgewaehlt mittels eines Triggers immer speichern möchte. Bei den 3 Triggerarten scheint mir nur der Data Trigger eine Verbindung zu einer selbst definierten Variable aufbauen zu können. Der Nachteil ist wohl aber, dass das immer eine bestimmte Datenbedingung braucht. Mein folgender Versuch klappt (natürlich deshalb) nicht. Wie müsste ich das schreiben?

    <UserControl.Resources>

      <StyleTargetType="ListBoxItem"x:Key="myListBoxItemStyle">

         <Style.Triggers>

            <DataTriggerBinding="{BindingPath=Ausgewaehlt}" >

              <SetterProperty="true" />

            </DataTrigger>

        </Style.Triggers>

      </Style>

    </UserControl.Resources>

    Gruß Andreas

    Sonntag, 16. August 2015 07:22
  • Hallo Andreas,

    erstelle bitte für eine neue Frage einen neuen Thread, sonst wird das erfahrungsgemäß manchmal sehr schnell unübersichtlich.

    Wozu nun die selbst definierte Eigenschaft? Was bietet diese mehr als das was schon vorhanden ist?

    An sich würde ich auch zum DataTrigger greifen, da eben nur dieser zu einfachen Eigenschaften navigieren kann. Ggf. wäre aber auch ein normaler Trigger in Kombination mit einem Abhängigkeitseigenschaft denkbar. Entweder hast du ein bestimmtes Binding oder aber nur die Angabe einer bestimmten Eigenschaft. Ich sehe da das Problem nicht.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    • Als Antwort markiert AndreasM2000 Sonntag, 16. August 2015 12:14
    Sonntag, 16. August 2015 12:01
    Moderator