我有一个ListBox,它的DateTemplate是这样的:
<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时,是否可以不设置图像的背景? 就像在VS的Intellisense中一样,API的图标也没有背景。
答案 0 :(得分: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中。因此,您可以保持Image元素的背景不变。
希望这有帮助。
答案 1 :(得分:1)
最简单的方法是将您的图片放在另一个Grid
内,并将网格Background
设置为您希望图片具有的背景颜色 - 然后在您更改{时父亲Background
的{1}},图片的父网格将保护其免受背景颜色变化的影响。