2010-04-13 41 views
0

我有一个使用DataTemplate呈现数据绑定项目的ListBox。用于DataTemplate中的XAML如下:通过具有任何背景画笔的DataTemplate呈现的项目呈现选项着色后面的项目

<DataTemplate x:Key="NameResultTemplate"> 
       <WrapPanel x:Name="PersonResultWrapper" Margin="0" Orientation="Vertical" Background="{Binding Converter={StaticResource NameResultToColor}, Mode=OneWay}" > 
        <i:Interaction.Triggers> 
         <i:EventTrigger EventName="MouseDown"> 
          <cmd:EventToCommand x:Name="SelectPersonEventCommand" Command="{Binding Search.SelectedPersonCommand, Mode=OneWay, Source={StaticResource Locator}}" CommandParameter="{Binding Mode=OneWay}" /> 
         </i:EventTrigger> 
        </i:Interaction.Triggers> 
        <TextBlock x:Name="txtPersonName" TextWrapping="Wrap" Margin="0" VerticalAlignment="Top" Text="{Binding PersonName}" FontSize="24" Foreground="Black" /> 
        <TextBlock x:Name="txtAgencyName" TextWrapping="Wrap" Text="{Binding AgencyName}" HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="0" FontStyle="Italic" Foreground="Black" /> 
        <TextBlock x:Name="txtPIDORI" TextWrapping="Wrap" Text="{Binding PIDORI}" HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="0" FontStyle="Italic" Foreground="Black" /> 
        <TextBlock x:Name="txtDescriptors" TextWrapping="Wrap" Text="{Binding DisplayDescriptors}" Margin="0" VerticalAlignment="Top" Foreground="Black"/> 
        <Separator Margin="0" Width="400" /> 
       </WrapPanel> 
      </DataTemplate> 

注意,有称为NameResultToColor值转换器,其改变所呈现的WrapPanel的背景刷取决于某些情景渐变画笔。

所有这些都按我所预期的那样工作,除非您单击任何呈现的ListBox项目。当你点击一个时,只有最基本的选择颜色(默认蓝色)。我可以在我的渐变刷面物品下方看到它的一丝痕迹。如果我将背景刷重置为“无刷”,则选择渲染将正常工作。如果我将背景画笔设置为纯色,它也无法像我所预期的那样进行渲染。

如何才能让选择颜色处于最佳状态?什么是选择渲染?

回答

3

问题在于您的物品的模板正在绘制在ListBoxItem正在绘制的选区上。如果你想确保颜色保持,你可以添加一个DataTrigger设置WrapPanel为空的背景该项目被选中时:

<DataTemplate x:Key="NameResultTemplate"> 
    <WrapPanel x:Name="PersonResultWrapper"> 
     ... 
    </WrapPanel> 
    <DataTemplate.Triggers> 
     <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}}" Value="True"> 
      <Setter TargetName="PersonResultWrapper" Property="Background" Value="{x:Null}" /> 
     </DataTrigger> 
    </DataTemplate.Triggers> 
</DataTemplate> 
+0

你钉它...感谢安倍! – 2010-04-13 20:18:43

+0

查看ListBoxItem的默认模板后,我确信它不起作用。但它确实奏效,恭喜和感谢。但是,我不明白它为什么可行... – Timores 2010-04-13 20:36:16

+1

@Timores - 事情是ListBoxItem有一个包装ContentPresenter的边框。边框的内容将绘制它的背景。因此,当ContentPresenter的内容是背景设置的WrapPanel时,它将绘制Border绘制的任何背景作为其背景。 – 2010-04-13 22:18:16