2010-06-14 63 views
1

我有一個項目的集合。我正在使用DataTemplate在WPF列表框中顯示這些項目。 DataTemplate的一部分是Thumb,用於調整項目之間的大小和視覺上的分隔。 Thumb.Visibility綁定到該項目的屬性(例如,最後一個項目沒有可見的Thumb)。如何不在ListBoxItem選擇中包含一個Thumb

問題是,選擇ListBox中的一個項目也會選擇Thumb,因爲它是ListBoxItem的一部分。期望的行爲是隻選擇沒有Thumb的數據。
如何獲得此行爲?我不想通過代碼ListBox添加項目或手動處理Thumb的可見性。目前我從DataTemplate得到這一切。

回答

0

做到這一點內部容器風格,而不是DataTemplate。即定義您自己的ListBoxItem風格,並只突出顯示所需內容。例如: -

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