2011-11-16 40 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