2011-11-16 42 views
2

我有一个ListBox与一些ListBoxItems。每个ListBoxItem都包含一些文本和背景图像。当用户点击一个ListBoxItem时,我想在ListBoxItem的顶部添加一个图像(它用一些额外的外观装饰该项目)。将图像添加到WPF的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> 

回答

2

把你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> 

编辑

您还可以通过覆盖HighlightBrush Color并删除SelectedItem的蓝色背景它透明

<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> 

+0

谢谢你,它的工作不知何故!然而,当我点击一个元素时,我得到一个蓝色的项目,我认为是因为select事件。点击后可以删除这个蓝色选择吗? 谢谢。 – Ali

+0

在第二个注释中,它看起来像文本是与其他元素分开的。我想让文字处于中间位置,但是文字现在位于顶部,图像(位于网格中)位于其下方;图像不覆盖网格的内容。 – Ali

+0

@Ali我更新了我的答案。设置你的'TextBlock'对齐将它放置在网格的中心,并调整'ListBoxItem'样式来改变高光刷子颜色 – Rachel