2008-12-10 8 views
8

Ich habe eine ListBox, die Bilder horizontal scrollt.WPF Xaml Custom Styling Ausgewählter Objektstil in einer ListBox

Ich habe die folgenden XAML ich verwendete Mischung, um es zu erstellen. Es hatte ursprünglich einen x: Key auf der Style TaregetType Zeile, sagte MSDN, um es zu entfernen, da ich Fehler auf diesem bekam. Jetzt bin ich diesen Fehler:

Error 3 Operation is not valid while ItemsSource is in use. Access and modify elements with ItemsControl.ItemsSource instead.

Ich verstehe nicht, wie alle diese Junk anzuwenden, die Art und Weise habe ich einige Dinge ausprobiert, nichts funktioniert.

Mein Ziel ist es, den Hintergrund des ausgewählten Objekts weiß, nicht blau zu haben. Scheint so viel Arbeit für etwas so kleines!

Danke.

<ListBox ItemsSource="{Binding Source={StaticResource WPFApparelCollection}}" 
     Grid.Row="1" Margin="2,26,2,104" ScrollViewer.VerticalScrollBarVisibility="Hidden" 
      ScrollViewer.HorizontalScrollBarVisibility="Hidden" SelectionMode="Single" 
     x:Name="list1" MouseLeave="List1_MouseLeave" MouseMove="List1_MouseMove" Style="{DynamicResource ListBoxStyle1}" > 
     <Style TargetType="{x:Type ListBoxItem}"> 
      <Setter Property="Background" Value="Transparent"/> 
      <Setter Property="HorizontalContentAlignment" Value="{Binding Path=HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/> 
      <Setter Property="VerticalContentAlignment" Value="{Binding Path=VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/> 
      <Setter Property="Padding" Value="2,0,0,0"/> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type ListBoxItem}"> 
         <Border x:Name="Bd" SnapsToDevicePixels="true" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}"> 
          <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
         </Border> 
         <ControlTemplate.Triggers> 
          <Trigger Property="IsSelected" Value="true"> 
           <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/> 
           <Setter Property="Background" TargetName="Bd" Value="#FFFFFFFF"/> 
          </Trigger> 
          <MultiTrigger> 
           <MultiTrigger.Conditions> 
            <Condition Property="IsSelected" Value="true"/> 
            <Condition Property="Selector.IsSelectionActive" Value="false"/> 
           </MultiTrigger.Conditions> 
           <Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/> 
           <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> 
          </MultiTrigger> 
          <Trigger Property="IsEnabled" Value="false"> 
           <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
     <ListBox.ItemsPanel> 
      <ItemsPanelTemplate> 
       <VirtualizingStackPanel 
      Orientation="Horizontal" 
      IsItemsHost="True" /> 
      </ItemsPanelTemplate> 
     </ListBox.ItemsPanel> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <Image Source="{Binding Image}" /> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

Antwort

13

Wickeln Sie die Style-Tag mit einem ItemContainerStyle wie folgt:

<ListBox ItemsSource="{Binding Source={StaticResource WPFApparelCollection}}" 
     Grid.Row="1" Margin="2,26,2,104" 
     ScrollViewer.VerticalScrollBarVisibility="Hidden" 
     ScrollViewer.HorizontalScrollBarVisibility="Hidden" 
     SelectionMode="Single" 
     x:Name="list1" MouseLeave="List1_MouseLeave" MouseMove="List1_MouseMove" 
     Style="{DynamicResource ListBoxStyle1}" > 

     <ListBox.ItemContainerStyle> 
      <Style TargetType="{x:Type ListBoxItem}"> 
       <Setter Property="Background" Value="Transparent"/> 
      </Style> 
<!-- the rest of your code, but close the ItemContainerStyle --> 
     </ListBox.ItemContainerStyle> 
    </ListBox> 
2

ich die obige Lösung versucht, aber es hat nicht funktioniert als so gefunden erwartete ich einen anderen Weg, um mein Problem zu lösen, die Auswahl zu deaktivieren ist für listbox

das ist, was ich tat

<ListBox.ItemContainerStyle> 
    <Style TargetType="{x:Type ListBoxItem}"> 
     <Setter Property="Focusable" Value="False"/> 
    </Style> 
</ListBox.ItemContainerStyle>