当前位置:   article > 正文

WPF中ListView样式设置ListViewStyle、ListViewItemStyle绑定双击事件、滚动条,双击改变选中条目颜色,但是滚动list后颜色消失_wpf listview节点双击

wpf listview节点双击

WPF中ListView样式设置ListViewStyle、ListViewItemStyle绑定双击事件、滚动条,双击改变选中条目颜色,但是滚动list后颜色消失

样式:

  1. <Style x:Key="ListViewItemStyle" TargetType="{x:Type ListViewItem}" >
  2. <Setter Property="Height" Value="30" />
  3. <Setter Property="Foreground" Value="{StaticResource TextBrush}" />
  4. <Setter Property="Background" Value="Transparent" />
  5. <Setter Property="HorizontalContentAlignment" Value="Stretch" />
  6. <Setter Property="BorderBrush" Value="Transparent" />
  7. <Setter Property="BorderThickness" Value="0" />
  8. <Setter Property="Margin" Value="0,0,0,1" />
  9. <Setter Property="Padding" Value="5,2,5,2" />
  10. <Setter Property="VerticalContentAlignment" Value="Center" />
  11. <Setter Property="Background">
  12. <Setter.Value>
  13. <Binding RelativeSource="{RelativeSource Self}" Converter="{StaticResource ItemBackgroundConverter}"/>
  14. </Setter.Value>
  15. </Setter>
  16. <Setter Property="Template">
  17. <Setter.Value>
  18. <ControlTemplate TargetType="{x:Type commonControl:ListViewItemEx}">
  19. <Border SnapsToDevicePixels="true" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="0" x:Name="border">
  20. <Grid Margin="2,0,2,0">
  21. <Rectangle x:Name="Background" IsHitTestVisible="True" Opacity="1" Fill="{TemplateBinding Background}" RadiusX="1" RadiusY="1"/>
  22. <Rectangle x:Name="HoverRectangle" IsHitTestVisible="True" Opacity="0" Fill="#767779" RadiusX="1" RadiusY="1"/>
  23. <Rectangle x:Name="SelectedRectangle" IsHitTestVisible="True" Opacity="0" Fill="#767779" RadiusX="1" RadiusY="1"/>
  24. <GridViewRowPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Margin="0,2,0,2" VerticalAlignment="Stretch" />
  25. </Grid>
  26. </Border>
  27. <ControlTemplate.Triggers>
  28. <Trigger Property="IsDoubleClick" Value="True">
  29. <Setter Property="Foreground" Value="#FF9740"/>
  30. </Trigger>
  31. </ControlTemplate.Triggers>
  32. </ControlTemplate>
  33. </Setter.Value>
  34. </Setter>
  35. </Style>
  36. <Style x:Key="ListViewStyle" TargetType="{x:Type ListView}">
  37. <Setter Property="SnapsToDevicePixels" Value="true" />
  38. <Setter Property="OverridesDefaultStyle" Value="true" />
  39. <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" />
  40. <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" />
  41. <Setter Property="ScrollViewer.CanContentScroll" Value="true" />
  42. <Setter Property="VerticalContentAlignment" Value="Center" />
  43. <Setter Property="Template">
  44. <Setter.Value>
  45. <ControlTemplate TargetType="{x:Type commonControl:ListViewEx}">
  46. <Border Name="Border" BorderThickness="1" Background="{x:Null}">
  47. <Border.BorderBrush>
  48. <SolidColorBrush Color="{StaticResource BorderMediumColor}" />
  49. </Border.BorderBrush>
  50. <ScrollViewer Style="{StaticResource {x:Static GridView.GridViewScrollViewerStyleKey}}">
  51. <ItemsPresenter />
  52. </ScrollViewer>
  53. </Border>
  54. </ControlTemplate>
  55. </Setter.Value>
  56. </Setter>
  57. </Style>

解决方案:

在 WPF 中,如果你通过样式设置双击 ListView 后改变选中条目颜色,但是滚动 ListView 后颜色消失,可能是由于虚拟化(Virtualization)引起的。
默认情况下,WPF 的 ListView 和一些其他控件启用了虚拟化机制,这意味着只有当前可见的部分才会被渲染,而不是所有项。这可以提高性能,特别是在处理大量数据时。
当使用虚拟化时,当你滚动 ListView 时,已经渲染的项将被重用,而不是重新创建,因此,你的样式设置可能不会被应用于重用的项。
为了解决这个问题,你可以通过设置 ListView 的 VirtualizingStackPanel.IsVirtualizing 属性为 False,禁用虚拟化机制,以确保所有项都被渲染,并且你的样式设置将被应用于所有项。

例如,你可以在 ListView 的 XAML 中添加以下属性:
<ListView VirtualizingStackPanel.IsVirtualizing="False">
 <!-- your list view items and other properties --> 
</ListView> 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/537722
推荐阅读
相关标签
  

闽ICP备14008679号