0

我有一个 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 的图标没有背景。

4

2 回答 2

1

最简单的方法是将您的图像放入另一个Grid 中Grid,并将 Grid 设置为Background您希望图像具有的背景颜色 - 然后当您更改BackgroundparentBorder时,图像的父网格将保护它免受背景颜色更改的影响。

于 2013-04-23T12:01:39.243 回答
1

我不完全确定这是否是您的意思,但我建议不要使用数据模板,而是使用项目容器控件模板的元素进行所有必要的数据绑定。这是可能的,因为项目容器和数据模板实际上共享相同的数据上下文。在 a 的情况下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 元素的背景不变。

希望这可以帮助。

于 2013-04-23T09:26:01.340 回答