Добавление изображения поверх ListBoxItem в WPF - PullRequest
2 голосов
/ 16 ноября 2011

У меня есть ListBox с некоторыми ListBoxItems. Каждый ListBoxItem содержит текст и фоновое изображение. Когда пользователь щелкает элемент ListBoxItem, я хочу добавить изображение поверх элемента ListBoxItem (он украшает элемент некоторыми дополнительными образами).

Я ищу способ наложения изображения на нажатой ListBoxItem. Вот код, который у меня есть:

    <ListBox Margin="0,34,0,25.113" Background="{x:Null}" BorderThickness="0">
        <ListBoxItem Content="First Item" Height="71.96" Margin="0,10,0,0">
            <ListBoxItem.Background>
                <ImageBrush ImageSource="Untitled-4.png"/>
            </ListBoxItem.Background>
        </ListBoxItem>
    </ListBox>

1 Ответ

2 голосов
/ 16 ноября 2011

Поместите ListBoxItem.Content на панель, которая позволяет перекрывать элементы управления, такие как Grid, и сделать верхнее изображение Visibililty основанным на ListBoxItem.IsSelected

<ListBox.Resources>
    <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
</ListBox.Resources>

<ListBoxItem Height="71.96" Margin="0,10,0,0">
    <ListBoxItem.Background>
        <ImageBrush ImageSource="Untitled-4.png"/>
    </ListBoxItem.Background>
    <Grid>
        <TextBlock Text="First Item" 
                   VerticalAlignment="Center" HorizontalAlignment="Center" />

        <Image Source="SomeImage.jpg"
               Visibility="{Binding IsSelected, 
                   RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}, 
                   Converter={StaticResource BooleanToVisibilityConverter}}" />
    </Grid>
</ListBoxItem>

Редактировать

Вы также можете удалить синий фон для SelectedItem, переписав цвет HighlightBrush и сделав его прозрачным

<ListBox.Resources>
    <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />

    <Style TargetType="{x:Type ListBoxItem}">
        <Style.Resources>
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
            <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" />
        </Style.Resources>
    </Style>
</ListBox.Resources>

...