我正在寻找修改WPF ListView,以便项目水平呈现,并且第一个项目和所有后续项目之间有一个分隔符。像这样:如何覆盖ListView的ContentTemplate以添加垂直分隔符?
我已经得到了水平位,但我坚持使用分隔符。我尝试使用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:
spendi后纳克早上模板上读了,我决定一个控件模板是其经过斗争给了我这个代码的解决方案:
<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条目:Change selection-color of WPF ListViewItem,以突出显示行为,但没有成功。
我如何获得我正在查找的结果,并且ControlTemplate是进行此更改的正确位置?
编辑:理想情况下,我正在寻找一个解决方案,只使用xaml。
该分隔符相对于“ListViewItem”本身而言不是容器的一部分。您现在正在使用水平“StackPanel”,试着编写自己的'HorizontalPanelWithSeparator'。 – Sinatr
我会放弃它,谢谢。 – Jamey