2009-05-08 4 views
1

fand ich diesen Code, der die Standard-Auswahl Stil mit benutzerdefinierten Stil für die select ListBoxItem in einem List-Box ersetzt. Es gibt jedoch immer noch eine kleine blaue Linie links vom Standard-Stil, den ich nicht mit irgendwelchen Polster- oder Randänderungen entfernen kann.Wie entferne ich die linke blaue Linie auf benutzerdefinierten ausgewählten gestylten Listbox-Elementen?

Wie kann ich entfernen, die blaue Linie und die Art des gewählten ListBoxItem vollständig bestimmen?

alt text http://tanguay.info/web/external/blueLineLeft.png

<Window x:Class="CodingContext.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:CodingContext" 
    Title="Window1" Height="300" Width="300"> 
    <Window.Resources> 

     <DataTemplate x:Key="ItemTemplate" DataType="{x:Type local:Person}"> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="*"/> 
        <ColumnDefinition Width="Auto" /> 
       </Grid.ColumnDefinitions> 

       <TextBlock Grid.Column="0" Text="{Binding Path=Name, StringFormat=Name: \{0\}}" /> 
       <TextBlock Grid.Column="1" Text="{Binding Path=Age, StringFormat=Age: \{0\}}" /> 
      </Grid> 
     </DataTemplate> 

     <DataTemplate x:Key="SelectedTemplate" DataType="{x:Type local:Person}"> 
      <Grid Background="Yellow"> 

       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="*"/> 
        <ColumnDefinition Width="Auto" /> 
       </Grid.ColumnDefinitions> 
       <Grid.RowDefinitions> 
        <RowDefinition /> 
        <RowDefinition /> 
        <RowDefinition /> 
        <RowDefinition /> 
       </Grid.RowDefinitions> 

       <TextBlock Foreground="Black" Grid.Row="0" Grid.Column="0" Text="Person" FontSize="14" FontWeight="Bold" /> 
       <TextBlock Grid.Row="1" Grid.Column="0" Text="{Binding Path=Name, StringFormat=Name: \{0\}}" /> 
       <TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding Path=Age, StringFormat=Age: \{0\}}" /> 

       <TextBlock Grid.Row="2" Grid.Column="0" Text="Address" FontSize="14" FontWeight="Bold" /> 
       <StackPanel Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" Orientation="Horizontal"> 
        <TextBlock Text="{Binding Address}" /> 
        <TextBlock Text="{Binding City, StringFormat= \{0\}}" /> 
        <TextBlock Text="{Binding State, StringFormat= \{0\}}" /> 
        <TextBlock Text="{Binding Zip, StringFormat= \{0\}}" /> 
       </StackPanel> 
      </Grid> 
     </DataTemplate> 

     <Style TargetType="{x:Type ListBoxItem}" x:Key="ContainerStyle"> 
      <Setter Property="ContentTemplate" Value="{StaticResource ItemTemplate}" /> 
      <Setter Property="Margin" Value="5" /> 
      <Style.Triggers> 
       <Trigger Property="IsSelected" Value="True"> 
        <Setter Property="ContentTemplate" Value="{StaticResource SelectedTemplate}" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 

    </Window.Resources> 

    <ListBox HorizontalContentAlignment="Stretch" Margin="10" x:Name="lstPeople" ItemsSource="{Binding People}" ItemContainerStyle="{StaticResource ContainerStyle}" /> 

</Window> 

Antwort

4

Ich bin mir ziemlich sicher, dass dies ein Fehler ist, da mehrere Leute dieses Problem mit der ListBoxItem Vorlage gehabt haben.

zu beheben, fügen Sie einfach:

<Setter Property="Padding" Value="0,0,0,0"/> 

auf Ihre ContainerStyle Vorlage. Es ist ursprünglich 2,0,0,0.

+0

ja, dass man Geige mit ihm zu bekommen Klotzen zurück in (ich hatte aufzubringen, um eine Marge auf jedem der Kind Textblöcke, eine gemeinsame Grenze mit Polsterung gehalten bringt die blaue Linie zurück), aber es ist machbar so funktioniert, dank . –

1

Werfen Sie einen Blick auf this answer to a similar question. Grundsätzlich, wenn Sie die List-Box restyle wollen, so dass ausgewählte Elemente eine andere Hintergrundfarbe haben, ist es einfacher, einfach die „HighlightBrush“ Farbe zu ändern, so dass das ausgewählte Element die Farbe verwendet, die Sie wollen.

Verwandte Themen