这是之前提出的问题的链接,涉及TreeView:
WPF TreeView: How to style selected items with rounded corners like in Explorer
我的问题是:如何在ListView上迁移此解决方案?
答案有点混乱,所以我不明白那里发生了什么!
答案 0 :(得分:2)
我认为这个问题听起来很熟悉。 :)
因此,您应只能使用相同的代码,但随后使用Visual Studio查找并替换TreeView
到ListView
。当然,有一些部分,例如{em}可能需要更加谨慎地改变Image.Source
和IsMouseDirectlyOverItem
帮助器。在大多数情况下,查找和替换功能应该起作用。 TreeView
和ListView
具有绝对相同的属性。
如果您在执行此操作时遇到任何问题,请与我们联系。
您可以将HierarchicalDataTemplate
改为正常状态:
<DataTemplate DataType="{x:Type viewmodels:ObjectBaseViewModel}">
<StackPanel Orientation="Horizontal" Margin="2,1,5,2">
<Grid Margin="0,0,3,0">
<Image Name="icon" Source="/ExplorerTreeView/Images/folder.png"/>
</Grid>
<TextBlock Text="{Binding Name}" />
</StackPanel>
</DataTemplate>
如果我误解了你的问题,请告诉我。
答案 1 :(得分:0)
嗯,我做了一些改变,我认为现在它的效果更好:
<ListView ...>
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="BorderThickness" Value="1"/>
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="helpers:ListViewHelper.IsMouseDirectlyOverItem" Value="False"/>
<Condition Property="IsSelected" Value="False"/>
<Condition Property="IsFocused" Value="false"/>
</MultiTrigger.Conditions>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderBrush" Value="Transparent"/>
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="helpers:ListViewHelper.IsMouseDirectlyOverItem" Value="True"/>
<Condition Property="IsSelected" Value="False"/>
</MultiTrigger.Conditions>
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#FFF8F8F8" Offset="0"/>
<GradientStop Color="#FFE5E5E5" Offset="1"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
<Setter Property="BorderBrush" Value="#D9D9D9"/>
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsFocused" Value="True"/>
<Condition Property="IsSelected" Value="True"/>
</MultiTrigger.Conditions>
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#FFFAFBFD" Offset="0"/>
<GradientStop Color="#B8D6FB " Offset="1"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
<Setter Property="BorderBrush" Value="#D9D9D9"/>
</MultiTrigger>
</Style.Triggers>
<Style.Resources>
<Style TargetType="Border">
<Setter Property="CornerRadius" Value="2"/>
</Style>
</Style.Resources>
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemTemplate>
<DataTemplate>
...
</DataTemplate>
</ListView.ItemTemplate>
<ListView.Resources>
<!-- Brushes for the selected item -->
<LinearGradientBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#FFFAFBFD" Offset="0"/>
<GradientStop Color="#B8D6FB " Offset="1"/>
</LinearGradientBrush>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />
<SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Black" />
</ListView.Resources>
</ListView>
我在上一个答案中遇到的问题是:例如,当您将listView中的点击切换到另一个时,此ListView的父控件也是ListView(或TreeView),最后选择的ListView始终保持选中状态我也认为,因为它与其他孩子无关。