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

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

样式:

<Style  x:Key="ListViewItemStyle" TargetType="{x:Type ListViewItem}" >
    <Setter Property="Height" Value="30" />
    <Setter Property="Foreground" Value="{StaticResource TextBrush}" />
    <Setter Property="Background" Value="Transparent" />
    <Setter Property="HorizontalContentAlignment" Value="Stretch" />
    <Setter Property="BorderBrush" Value="Transparent" />
    <Setter Property="BorderThickness" Value="0" />
    <Setter Property="Margin" Value="0,0,0,1" />
    <Setter Property="Padding" Value="5,2,5,2" />
    <Setter Property="VerticalContentAlignment" Value="Center" />
    <Setter Property="Background">
        <Setter.Value>
            <Binding RelativeSource="{RelativeSource Self}" Converter="{StaticResource ItemBackgroundConverter}"/>
        </Setter.Value>
    </Setter>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type commonControl:ListViewItemEx}">
                <Border SnapsToDevicePixels="true" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="0" x:Name="border">
                    <Grid Margin="2,0,2,0">
                        <Rectangle x:Name="Background" IsHitTestVisible="True" Opacity="1" Fill="{TemplateBinding Background}" RadiusX="1" RadiusY="1"/>
                        <Rectangle x:Name="HoverRectangle" IsHitTestVisible="True" Opacity="0" Fill="#767779" RadiusX="1" RadiusY="1"/>
                        <Rectangle x:Name="SelectedRectangle" IsHitTestVisible="True" Opacity="0" Fill="#767779" RadiusX="1" RadiusY="1"/>
                        <GridViewRowPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Margin="0,2,0,2" VerticalAlignment="Stretch" />
                    </Grid>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsDoubleClick" Value="True">
                        <Setter Property="Foreground" Value="#FF9740"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
<Style x:Key="ListViewStyle"  TargetType="{x:Type ListView}">
    <Setter Property="SnapsToDevicePixels" Value="true" />
    <Setter Property="OverridesDefaultStyle" Value="true" />
    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" />
    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" />
    <Setter Property="ScrollViewer.CanContentScroll" Value="true" />
    <Setter Property="VerticalContentAlignment" Value="Center" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type commonControl:ListViewEx}">
                <Border Name="Border" BorderThickness="1" Background="{x:Null}">
                    <Border.BorderBrush>
                        <SolidColorBrush Color="{StaticResource BorderMediumColor}" />
                    </Border.BorderBrush>
                    <ScrollViewer Style="{StaticResource {x:Static GridView.GridViewScrollViewerStyleKey}}">
                        <ItemsPresenter />
                    </ScrollViewer>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</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> 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
WPF RichTextBox 控件的滚动条是由系统主题自动渲染的,因此它的颜色会受到系统主题的影响。如果你希望在不同的系统主题下,RichTextBox 控件的滚动条颜色保持一致,可以使用自定义样式。 以下是一个示例样式,它会将 RichTextBox 控件的滚动条颜色设置为红色: ```xml <Style x:Key="CustomRichTextBoxStyle" TargetType="{x:Type RichTextBox}"> <Setter Property="Foreground" Value="White" /> <Setter Property="Background" Value="Black" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type RichTextBox}"> <Grid> <ScrollViewer x:Name="PART_ContentHost" Background="{TemplateBinding Background}" Foreground="{TemplateBinding Foreground}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"> <ScrollViewer.Template> <ControlTemplate TargetType="{x:Type ScrollViewer}"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="*" /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <Border Grid.Column="0" Grid.Row="0" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"> <AdornerDecorator> <ContentPresenter /> </AdornerDecorator> </Border> <ScrollBar x:Name="PART_VerticalScrollBar" Grid.Column="1" Grid.Row="0" Value="{TemplateBinding VerticalOffset}" Maximum="{TemplateBinding ScrollableHeight}" ViewportSize="{TemplateBinding ViewportHeight}" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" /> <ScrollBar x:Name="PART_HorizontalScrollBar" Grid.Column="0" Grid.Row="1" Orientation="Horizontal" Value="{TemplateBinding HorizontalOffset}" Maximum="{TemplateBinding ScrollableWidth}" ViewportSize="{TemplateBinding ViewportWidth}" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" /> </Grid> </ControlTemplate> </ScrollViewer.Template> </ScrollViewer> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> ``` 在上面的样式,我定义了一个名为 CustomRichTextBoxStyle样式,并将其应用于 RichTextBox 控件。该样式使用了一个自定义的 ScrollViewer 模板,并将滚动条颜色设置为红色。你可以根据需要修改颜色和其他样式属性。 要使用这个样式,只需将 Style 属性设置为 CustomRichTextBoxStyle: ```xml <RichTextBox Style="{StaticResource CustomRichTextBoxStyle}" /> ``` 这样就可以将 RichTextBox 控件的滚动条颜色设置为红色了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangnaisheng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值