如何在ListBoxItem选择中包含Thumb

时间:2010-06-14 13:50:52

标签: c# wpf c#-3.0

我有一系列物品。我使用DataTemplate在WPF ListBox中呈现项目。 DataTemplate的一部分是Thumb,用于调整项目的大小和视觉上的分隔。 Thumb.Visibility绑定到项目的属性(例如,最后一项没有可见的Thumb)。

问题在于,选择ListBox中的项目也会选择Thumb,因为它是ListBoxItem的一部分。所需的行为是仅选择没有Thumb的数据。
如何才能获得此行为?我不想按代码ListBox添加项目,也不想手动处理Thumb的可见性。目前,我从DataTemplate获得了所有这些。

1 个答案:

答案 0 :(得分:0)

在项容器样式内执行此操作,而不是DataTemplate。即定义您自己的ListBoxItem样式,并仅突出显示所需内容。 E.g:

<Style x:Key="MyStyle" TargetType="{x:Type ListBoxItem}">
  <Setter Property="SnapsToDevicePixels" Value="true"/>
  <Setter Property="OverridesDefaultStyle" Value="true"/>
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type ListBoxItem}">
       <Grid>
        <Border 
          Name="Border"
          Margin="0, 0, 0, 1"
          Padding="2"
          SnapsToDevicePixels="true">
          <ContentPresenter />
        </Border>
         <Border Grid.Row="1" BorderThickness="0, 0, 0, 1" BorderBrush="Black"
                 SnapsToDevicePixels="True"/>
        </Grid>
        <ControlTemplate.Triggers>
          <Trigger Property="IsSelected" Value="true">
            <Setter TargetName="Border" Property="Background" Value="#DDDDDD"/>
          </Trigger>
          <Trigger Property="IsEnabled" Value="false">
            <Setter Property="Foreground" Value="#888888"/>
          </Trigger>
        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

然后:

<ListBox ItemContainerStyle="{StaticResource MyStyle}">