Je cherche à modifier un ListView WPF afin que les éléments soient rendus horizontalement, et il y a un séparateur entre le premier élément et tous les éléments suivants. Quelque chose comme ça: Comment puis-je remplacer le ContentTemplate d'un ListView pour ajouter un séparateur vertical?
J'ai le bit horizontal, mais je suis coincé avec le séparateur. J'ai essayé d'utiliser un DataTemplate, mais le séparateur Intègre dans l'élément réel qui signifie qu'il est mise en surbrillance lorsque je passe la souris (notez que je utilise Caliburn, mais je ne pense pas que cela aura une incidence sur la question beaucoup):
<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>
Les articles sont vues très basiques avec cette frontière:
<Border Background="White" BorderBrush="Black" BorderThickness="2">
Comment ça regarde avec DataTemplate:
Après spendi ng le matin la lecture sur des modèles, j'ai décidé que ControlTemplate était la solution qui, après une lutte m'a donné ce code:
<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>
Cela semble presque identique, mais maintenant je suis incapable de mettre en évidence les éléments pour une raison quelconque. Je pensais que j'avais peut-être outrepassé les déclencheurs, et j'ai essayé d'ajouter une entrée ControlTemplate.Triggers basée sur cette réponse: Change selection-color of WPF ListViewItem pour ramener le comportement de mise en évidence, mais sans succès.
Comment puis-je obtenir le résultat que je recherche, et ControlTemplate est-il le bon endroit pour effectuer ce changement?
EDIT: Idéalement, je suis à la recherche d'une solution en utilisant simplement xaml.
Ce séparateur fait plutôt partie du conteneur d'éléments que ListViewItem lui-même. Vous utilisez maintenant 'StackPanel' horizontal, essayez d'écrire' HorizontalPanelWithSeparator'. – Sinatr
Je vais essayer, merci. – Jamey