当多个项目时,ListBox项目分隔符

时间:2017-09-06 16:30:29

标签: wpf xaml

我有一个ListBox,我正在尝试在项目之间插入一个分隔符,但我希望分隔符显示何时有多个项目。

<ListBox Grid.Row="1" x:Name="WarningListBox" Visibility="Visible"
                     HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" 
                     ItemsSource="{Binding Path=Warnings}">
    <ListBox.Style>
        <Style TargetType="{x:Type ListBox}">
            <Setter Property="Height" Value="0"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding CanShowAll}" Value="True">
                    <Setter Property="Height" Value="Auto"/>
                    <Setter Property="MaxHeight" Value="120"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ListBox.Style>
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem" BasedOn="{StaticResource NewDesignListItemBoxStyle}">
            <Setter Property="Margin" Value="0"/>
            <Setter Property="Padding" Value="0"/>
        </Style>
    </ListBox.ItemContainerStyle>
    <ListBox.Resources>
        <DataTemplate x:Key="TypeOneViewModel" DataType="{x:Type vm:TypeOneViewModel}">
            <notifications:TypeOneNotification Focusable="False" MinHeight="30" Background="Beige"/>
        </DataTemplate>
        <DataTemplate x:Key="TypeTwoViewModel" DataType="{x:Type vm:TypeTwoViewModel}">
            <notifications:TypeTwoNotification Focusable="False" MinHeight="30" Background="Beige"/>
        </DataTemplate>
    </ListBox.Resources>
    <ListBox.ItemTemplateSelector>
        <templateSelectors:WarningTemplateSelector
            TypeOneDataTemplate="{StaticResource TypeOneViewModel}"
            TypeTwoDataTemplate="{StaticResource TypeTwoViewModel}"/>
    </ListBox.ItemTemplateSelector>
</ListBox>

我尝试在结束标记之前添加分隔符 <Separator Margin="30 0 30 0" BorderBrush="#CCCCCC" BorderThickness="2"/> 但它崩溃了应用程序。我应该以某种方式将它放在DataTemplate中吗?我认为它会显示在每个项目下(即使只有一个项目)。

1 个答案:

答案 0 :(得分:2)

我想,你想要实现这样的目标:

<DataTemplate x:Key="TypeOneViewModel" DataType="{x:Type vm:TypeOneViewModel}">
    <DockPanel LastChildFill="True">
        <Separator x:Name="separator" HorizontalAlignment="Stretch" VerticalAlignment="Top" DockPanel.Dock="Top">
            <Separator.Style>
                <Style TargetType="Separator">
                    <Setter Property="Visibility" Value="Visible"/>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding RelativeSource={RelativeSource PreviousData}, FallbackValue={x:Null}}" Value="{x:Null}">
                            <Setter Property="Visibility" Value="Collapsed"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Separator.Style>
        </Separator>
        <!--Rest of your DataTemplate-->
        <notifications:TypeOneNotification Focusable="False" MinHeight="30" Background="Beige"/>
    </DockPanel>
</DataTemplate>

如果项目没有PreviousData,这将隐藏分隔符,因此对于第1项。

如果多次使用,您可以轻松地将Separator样式放在外面,只需将其称为StaticResource。