我想修改一个WPF ListView,使项目水平呈现,并在第一项和所有后续项之间添加分隔符。类似于这样:。我已经实现了水平排列的部分,但是卡在了分隔符上。我尝试使用DataTemplate,但是这会将分隔符合并到实际项目中,这意味着当我悬停时它会被突出显示(请注意,我正在使用Caliburn,但我认为这不会对问题产生太大影响)。
这些项目是非常基本的视图,带有以下边框:
<UserControl.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
</UserControl.Resources>
<StackPanel Margin="20">
<ListView Name="Items" BorderThickness="0">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<ContentControl cal:View.Model="{Binding}" />
<Border Name="Separator" Width="2" Margin="5,10" HorizontalAlignment="Center" Background="Red" Visibility="{Binding IsFirst, Converter={StaticResource BooleanToVisibilityConverter}}" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
</StackPanel>
这些项目是非常基本的视图,带有以下边框:
<Border Background="White" BorderBrush="Black" BorderThickness="2">
使用DataTemplate后的效果如下:
在花了一整个上午的时间阅读有关模板的资料后,我决定使用ControlTemplate解决问题。经过一番努力,我得到了以下代码:
<UserControl.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
<Style TargetType="ListViewItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<StackPanel Margin="10" Orientation="Horizontal">
<ContentPresenter Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}" />
<Border Name="Separator" Width="2" Margin="5,10" HorizontalAlignment="Center" Background="Red" Visibility="{Binding IsFirst, Converter={StaticResource BooleanToVisibilityConverter}}" />
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<StackPanel>
<ListView Name="Items">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
</StackPanel>
这看起来几乎相同,但是我现在无法突出显示项目。我想也许我已经覆盖了触发器,并尝试添加一个基于此答案的ControlTemplate.Triggers条目(更改WPF ListViewItem的选择颜色),以恢复突出显示行为,但没有成功。
我如何获得我正在寻找的结果,控件模板是否是进行此更改的正确位置?
编辑:理想情况下,我希望使用仅限XAML的解决方案。
ListViewItem
本身。你现在正在使用水平的StackPanel
,尝试编写自己的HorizontalPanelWithSeparator
。 - Sinatr