1

在下面的代码中,如果我改变

  <Style  TargetType="{x:Type Border}">

  <Style  TargetType="{x:Type ListBoxItem}">

它会将我的整个列表框项着色为正确的颜色。但我只想打边框背景

  <ListBox  x:Name="FilteredMessagesListBox" BorderThickness="0" ScrollViewer.HorizontalScrollBarVisibility="Disabled" HorizontalContentAlignment="Stretch"  SelectionMode="Extended" Background="Transparent" AlternationCount="2">
                        <ListBox.Resources>
                            <Style  TargetType="{x:Type Border}">
                                <Style.Triggers>
                                    <Trigger Property="ItemsControl.AlternationIndex" Value="0">
                                        <Setter Property="Background" Value="LightBlue"></Setter>
                                    </Trigger>
                                    <Trigger Property="ItemsControl.AlternationIndex" Value="1">
                                        <Setter Property="Background" Value="LightGreen"></Setter>
                                    </Trigger>
                                </Style.Triggers>
                            </Style>

                        </ListBox.Resources>

                        <ListBox.ItemTemplate >
                            <DataTemplate>
                                <DockPanel Margin="0,0,0,3">
                                    <Button x:Name="AttachmentImageButton" Click="AttachmentImageButton_Click" DockPanel.Dock="Bottom" MaxWidth="200" MaxHeight="200" HorizontalContentAlignment="Center" Visibility="{Binding ElementName=AttachmentImageButton, Converter={StaticResource cImageAttachmentToVisible}}" >
                                        <Image Source="{Binding Path=Attachment}" x:Name="AttachmentImage" />
                                    </Button>
                                    <Button x:Name="AttachmentButton" Click="AttachmentButton_Click" DockPanel.Dock="Right" Visibility="{Binding ElementName=AttachmentButton, Converter={StaticResource cAttachmentToVisible}}" >
                                        <Image Source="/MobilWPF;component/Resources/Images/PaperClip/PaperClip.jpg" Width="20" Height="20"/>
                                    </Button>

                                    <TextBlock Text="{Binding Converter={StaticResource cGetInstantMessageHeader}}" Width="120" TextWrapping="Wrap" HorizontalAlignment="Left"  Background="Transparent" FontSize="10" DockPanel.Dock="Left"/>

                                    <Border DockPanel.Dock="Left"  HorizontalAlignment="Stretch" CornerRadius="5">
                                        <DockPanel>
                                            <TextBlock Margin="5,0,0,0" Text="{Binding Path=Message}" TextWrapping="Wrap" DockPanel.Dock="Left" HorizontalAlignment="Left" Background="Transparent" FontSize="12"/>
                                        </DockPanel>
                                    </Border>
                                </DockPanel>
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                    </ListBox>

我试过这个:

  <Border DockPanel.Dock="Left"  HorizontalAlignment="Stretch" CornerRadius="5">
                                        <Border.Triggers>
                                            <DataTrigger Binding="{Binding Path=(ItemsControl.AlternationIndex), RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}}" Value="0">
                                                <Setter Property="Background" Value="LightBlue"/>
                                            </DataTrigger>
                                            <DataTrigger Binding="{Binding Path=(ItemsControl.AlternationIndex), RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}}" Value="1">
                                                <Setter Property="Background" Value="LightGreen"/>
                                            </DataTrigger>
                                        </Border.Triggers>
  <DockPanel>
                                            <TextBlock Margin="5,0,0,0" Text="{Binding Path=Message}" TextWrapping="Wrap" DockPanel.Dock="Left" HorizontalAlignment="Left" Background="Transparent" FontSize="12"/>
                                        </DockPanel>
                                    </Border>

在“ContentPresenter”类型上找不到静态成员“BackgroundProperty”

4

1 回答 1

3

问题在于它AlternationIndex是在容器上设置的(ListBoxItem在这种情况下是 s ),而不是在其中的某个孩子上。DataTrigger您可以通过使用绑定到AlternationIndex父级的 s来解决此问题ListBoxItem

<DataTrigger Binding="{Binding Path=(ItemsControl.AlternationIndex), RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}}" Value="0">
    <Setter Property="Background" Value="LightBlue"/>
</DataTrigger>
于 2012-04-16T19:49:42.757 回答