2013-04-23 3 views
0

У меня есть ListBox, его DateTemplate так:Как изменить часть DataTemplate фона

<Grid Margin="30,0,0,0" HorizontalAlignment="Left"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition /> 
        <ColumnDefinition /> 
       </Grid.ColumnDefinitions> 
       <Image Source="{Binding Path=IconSource}"/> 
       <TextBlock Grid.Column="1" Background="{x:Null}" Text="{Binding Path=DisplayText, Mode=Default}" Foreground="Black"/> 
      </Grid> 

и это ItemContainerStyle:

<Style x:Key="Test" TargetType="ListBoxItem"> 
     <Setter Property="FocusVisualStyle" Value="{x:Null}"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ListBoxItem"> 
        <Border Name="Border" SnapsToDevicePixels="True"> 
         <ContentPresenter/> 
        </Border> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsSelected" Value="true"> 
          <Setter TargetName="Border" Property="Background" Value="Blue" /> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

Когда выбран один ListBoxItem, возможно не устанавливать фон изображения? Как и в Intellisense VS, значок API не имеет фона.

+0

Возможно, вы хотите ['ItemsControl'] (http://msdn.microsoft.com/en-us/library/system.windows.controls.itemscontrol.aspx)? –

+0

вы можете найти шаблоны для списка (item) на msdn и перезаписать необходимые вам свойства. Это, безусловно, возможно. – Terry

ответ

1

Проще всего поместить изображение внутри другого Grid и установить сетки-х Background на цвет фона вы хотите изображение, чтобы иметь - тогда, когда вы изменяете Background родителя Border, родительская сетка на изображении будет защищать это из-за изменения цвета фона.

1

Я не совсем уверен, что это то, что вы имели в виду, но я бы рекомендовал использовать шаблон данных, но вместо этого выполнить всю необходимую привязку данных к элементам шаблона управления контейнером элемента. Это возможно, так как контейнер товаров и шаблон данных фактически используют один и тот же контекст данных. В случае ListBoxItem, это будет выглядеть так:

<ControlTemplate x:Key="ListBoxItemTemplate" TargetType="ListBoxItem"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition/> 
     </Grid.ColumnDefinitions> 
     <Image Source="{Binding IconSource}" Height="50" Margin="0,0,5,0"/> 
     <Border x:Name="Border" VerticalAlignment="Center" Grid.Column="1"> 
      <TextBlock Text="{Binding Name}" /> 
     </Border> 
    </Grid> 
     <ControlTemplate.Triggers> 
      <Trigger Property="IsSelected" Value="true"> 
       <Setter TargetName="Border" Property="Background" Value="Blue" /> 
      </Trigger> 
     </ControlTemplate.Triggers> 

</ControlTemplate> 

Вы бы ссылку на этот шаблон в ItemsContainerStyle, который установлен на вашем ListBox.

Подводя итог: не используйте шаблон данных, а включайте его в ItemContainerStyle. Таким образом, вы можете оставить фон элемента изображения нетронутым.

Надеюсь, это поможет.

Смежные вопросы