WPF Xaml personalizado Styling Estilo item selecionado em um ListBox

votos
8

Eu tenho um ListBoxque rola imagens horizontalmente.

Eu tenho o seguinte XAML eu usei mistura para criá-lo. Ele tinha originalmente machado: Chave na Style TaregetTypelinha, MSDN disse para removê-lo, como eu estava recebendo erros sobre isso. Agora eu estou recebendo este erro:

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

Eu não entendo como aplicar tudo isso lixo que maneira, eu tentei várias coisas, nada está funcionando.

Meu objetivo é fazer com que o fundo do item selecionado ser branco, não azul. Parece um monte de trabalho para algo tão pequeno!

Obrigado.

    <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>
Publicado 10/12/2008 em 05:30
fonte usuário
Em outras línguas...                            


2 respostas

votos
13

Enrole a marca de estilo com um ItemContainerStyle como abaixo:

<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>
Respondeu 11/12/2008 em 01:31
fonte usuário

votos
2

Eu tentei a solução acima, mas didnt funcionou como esperado assim que eu encontrei outra maneira de resolver o meu problema que é para desativar a seleção de caixa de listagem

este é o que eu fiz

<ListBox.ItemContainerStyle>
    <Style TargetType="{x:Type ListBoxItem}">
         <Setter Property="Focusable" Value="False"/>
     </Style>
</ListBox.ItemContainerStyle>
Respondeu 17/01/2012 em 12:48
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more