Frage

Ich spiele um mit WPF und ich sah den folgenden Artikel: WPF Listview Inaktive Auswahl Farbe

Ich möchte etwas ähnliches tun. Ich möchte einen Rahmen um ein ein ListViewItem setzen, wenn es ausgewählt ist, und ich will nicht die Hintergrundfarbe ändern. Der Grund, warum ich dies will ist, ich will ein farbcodiert und Listview Ich möchte immer noch die Farbe sehen, wenn es ausgewählt, aber ich möchte wissen, es ausgewählt ist, indem sie es einen Rahmen um es hat.

Irgendwelche Ideen?

UPDATE:

habe ich versucht, die unten Antwort und es hat mir auf halbem Weg, macht es einen Rahmen um den ListViewItem setzen, aber es überschreibt meine Hintergrundfarbe. Ich kann nicht die richtige Syntax bekomme ich versuchte (Man beachte die BasedOn):

    <Style x:Key="SourceListView" TargetType="{x:Type ListViewItem}">
        <Setter Property="Background" Value="{Binding SourceType, Converter={StaticResource SourceGroupConverter}}"/>
    </Style>

    <Style x:Key="MyListViewItemStyle" TargetType="{x:Type ListViewItem}" BasedOn="{StaticResource SourceListView}" >
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ListViewItem}">
                    <Border
                             x:Name="Border"
                             BorderBrush="Transparent"
                             BorderThickness="1">
                        <GridViewRowPresenter Columns="{TemplateBinding GridView.ColumnCollection}" Content="{TemplateBinding Content}"/>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsSelected" Value="true">
                            <Setter TargetName="Border" Property="BorderBrush" Value="Black"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

Ich habe dann versucht diese:

    <Style x:Key="MyListViewItemStyle" TargetType="{x:Type ListViewItem}">
        <Setter Property="Background" Value="{Binding SourceType, Converter={StaticResource SourceGroupConverter}}"/>
        <Setter Property="Template">
            ...//Same as above
        </Setter>
    </Style>

Beide Versuche nur den Hintergrund auf weiß gesetzt (oder transparent, weiß ich nicht). Ich weiß, es ist nur Syntax und ich würde einen weiteren Schubs in die richtige Richtung zu schätzen wissen:)

War es hilfreich?

Lösung

Ändern Sie den ItemContainerStyle auf dem Listview zu einem Stil, den Hintergrund nicht ändern, wenn ein Element ausgewählt wird, sondern ändert sich die Farbe eines Rahmens. Im Folgenden finden Sie ein Beispiel:

  <Style x:Key="MyListViewItemStyle" TargetType="{x:Type ListViewItem}">
     <Setter Property="Background" Value="{Binding SourceType, Converter={StaticResource SourceGroupConverter}}" />
     <Setter Property="Template">
        <Setter.Value>
           <ControlTemplate TargetType="{x:Type ListViewItem}">
              <Border
                 x:Name="Border"
                 BorderBrush="Transparent"
                 BorderThickness="1"
                 Background="{TemplateBinding Background}">
                 <GridViewRowPresenter Columns="{TemplateBinding GridView.ColumnCollection}" Content="{TemplateBinding Content}"/>
              </Border>
              <ControlTemplate.Triggers>
                 <Trigger Property="IsSelected" Value="true">
                    <Setter TargetName="Border" Property="BorderBrush" Value="Black"/>
                 </Trigger>
              </ControlTemplate.Triggers>
           </ControlTemplate>
        </Setter.Value>
     </Setter>
  </Style>

Und dann verwenden Sie den Stil wie folgt aus:

<ListView ItemContainerStyle="{StaticResource MyListViewItemStyle}">
   ...
</ListView>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top