• 【WPF】ScrollViewer样式


    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                        xmlns:sys="clr-namespace:System;assembly=mscorlib"
                        xmlns:local="clr-namespace:ListViewCtrl.Styles">
    
    
        <sys:Double x:Key="ScrollBarSize">12</sys:Double>
        <!--ScrollBar-->
        <SolidColorBrush x:Key="ScrollBarForeround" Color="#877F7F"></SolidColorBrush>
        <SolidColorBrush x:Key="ScrollBarBackground" Color="#3E3E42"></SolidColorBrush>
        <SolidColorBrush x:Key="TextForeground" Color="White"></SolidColorBrush>
        <SolidColorBrush x:Key="TextBackground" Color="#0D234B"></SolidColorBrush>
        <SolidColorBrush x:Key="TextSelectionBrush" Color="#8F8787"></SolidColorBrush>
        <SolidColorBrush x:Key="MouseOverForeground" Color="Orange"></SolidColorBrush>
        <SolidColorBrush x:Key="PressedForeground" Color="DarkOrange"></SolidColorBrush>
        
        <Style x:Key="FIcon" TargetType="TextBlock">
            <Setter Property="FontFamily" Value="/ListViewCtrl;component/Resources/#SF2015"></Setter>
            <Setter Property="Foreground" Value="{StaticResource TextForeground}"/>
            <Setter Property="TextAlignment" Value="Center"/>
            <Setter Property="HorizontalAlignment" Value="Center"/>
            <Setter Property="VerticalAlignment" Value="Center"/>
            <Setter Property="FontSize" Value="20"/>
        </Style>
        
        <!--滚动两边按钮样式-->
        <Style x:Key="ScrollBarButton" TargetType="{x:Type RepeatButton}">
            <Setter Property="Background" Value="Transparent"></Setter>
            <Setter Property="Foreground" Value="{StaticResource TextForeground}"></Setter>
            <Setter Property="VerticalAlignment" Value="Center"></Setter>
            <Setter Property="HorizontalAlignment" Value="Center"></Setter>
            <Setter Property="Width" Value="auto"></Setter>
            <Setter Property="Height" Value="auto"></Setter>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type RepeatButton}">
                        <TextBlock x:Name="FIcon" FontSize="12" Margin="1"
                                   Style="{StaticResource FIcon}" 
                                   Text="{TemplateBinding local:ControlAttachProperty.FIcon}"/>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter Property="Foreground" Value="{StaticResource MouseOverForeground}" TargetName="FIcon"/>
                            </Trigger>
                            <Trigger Property="IsPressed" Value="True">
                                <Setter Property="Foreground" Value="{StaticResource PressedForeground}" TargetName="FIcon"/>
                            </Trigger>
                            <Trigger Property="IsEnabled" Value="false">
                                <Setter Property="Opacity" Value="0.5" TargetName="FIcon"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    
        <!--滚动条滑块两边按钮样式-->
        <Style x:Key="ScrollBarTrackButton" TargetType="{x:Type RepeatButton}">
            <Setter Property="Background" Value="Transparent"></Setter>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type RepeatButton}">
                        <Border Background="Transparent"></Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    
        <!--滚动条滑块样式-->
        <ControlTemplate x:Key="ThumbTemplate" TargetType="Thumb">
            <Grid>
                <Border  x:Name="Bg" CornerRadius="4" Margin="2" SnapsToDevicePixels="True" Background="{StaticResource ScrollBarForeround}">
                    <!--<Border.Background>
                        <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
                            <GradientStop Color="#C7C0C0" Offset="0.15"/>
                            <GradientStop Color="#AFA9A9" Offset=".5"/>
                            <GradientStop Color="#989494" Offset=".5"/>
                            <GradientStop Color="#858585" Offset="1"/>
                        </LinearGradientBrush>
                    </Border.Background>-->
                </Border>
            </Grid>
            <ControlTemplate.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Background" Value="{StaticResource MouseOverForeground}" TargetName="Bg"></Setter>
                </Trigger>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="Opacity" Value="0.5" TargetName="Bg"></Setter>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    
        <!--水平滚滚动条模板-->
        <ControlTemplate x:Key="HorizontalScrollBar" TargetType="{x:Type ScrollBar}">
            <Grid x:Name="HorizontalRoot" Height="{TemplateBinding Height}">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="Auto" />
                </Grid.ColumnDefinitions>
                <!--外部背景,好像不用更好看-->
                <!--<Border x:Name="Bg" Grid.Column="0" Grid.ColumnSpan="3" CornerRadius="0"  Opacity="0" Background="#858585"/>-->
                <!--内部背景-->
                <Border x:Name="BgInner" Grid.Column="1" Margin="0" SnapsToDevicePixels="True" Opacity="0.3"  CornerRadius="6" Background="{StaticResource ScrollBarBackground}"/>
                <!--左按钮-->
    
                <Border Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Center">
                    <RepeatButton local:ControlAttachProperty.FIcon="&#xe65e;" Style="{StaticResource ScrollBarButton}" x:Name="HorizontalSmallDecrease"
                                     IsTabStop="False" Interval="50" Margin="0,1,0,0" Command="ScrollBar.LineLeftCommand"/>
                </Border>
                <!--中间滑动区域-->
                <Track x:Name="PART_Track" IsDirectionReversed="False" Grid.Column="1">
                    <!--左滑块-->
                    <Track.DecreaseRepeatButton>
                        <RepeatButton x:Name="HorizontalLargeDecrease" Command="ScrollBar.PageLeftCommand"
                                          IsTabStop="False" Interval="50" Style="{DynamicResource ScrollBarTrackButton}" />
                    </Track.DecreaseRepeatButton>
                    <!--中间滑块 Margin="1" VerticalAlignment="Center" VerticalContentAlignment="Center" -->
                    <Track.Thumb>
                        <Thumb Template="{StaticResource ThumbTemplate}" />
                    </Track.Thumb>
                    <!--右滑块-->
                    <Track.IncreaseRepeatButton>
                        <RepeatButton x:Name="HorizontalLargeIncrease" Command="ScrollBar.PageRightCommand"
                                          IsTabStop="False"  Interval="50" Style="{DynamicResource ScrollBarTrackButton}" />
                    </Track.IncreaseRepeatButton>
                </Track>
                <!--右按钮-->
                <Border Grid.Column="2" VerticalAlignment="Center" HorizontalAlignment="Center">
                    <RepeatButton local:ControlAttachProperty.FIcon="&#xe605;" Style="{StaticResource ScrollBarButton}"
                                     IsTabStop="False" Interval="50" Margin="0,1,0,0" Command="ScrollBar.LineRightCommand"/>
                </Border>
            </Grid>
            <ControlTemplate.Triggers>
                <Trigger Property="IsMouseOver" Value="true">
                    <Setter TargetName="BgInner" Property="Opacity" Value="0.5"/>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    
        <!--垂直滚滚动条模板-->
        <ControlTemplate x:Key="VerticalScrollBar" TargetType="{x:Type ScrollBar}">
            <Grid x:Name="VerticalRoot" Height="{TemplateBinding Height}">
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="*" />
                    <RowDefinition Height="Auto" />
                </Grid.RowDefinitions>
                <!--外部背景,好像不用更好看-->
                <!--<Border x:Name="Bg" Grid.Row="0" Grid.RowSpan="3" CornerRadius="0" Opacity="0" Background="#858585"/>-->
                <!--内部背景-->
                <Border x:Name="BgInner" Grid.Row="1" Margin="0" CornerRadius="6" SnapsToDevicePixels ="True" Opacity="0.3"  Background="{StaticResource ScrollBarBackground}"/>
                <!--上按钮-->
                <Border Grid.Row="0" VerticalAlignment="Center" HorizontalAlignment="Center" x:Name="VerticalSmallDecrease">
                    <RepeatButton local:ControlAttachProperty.FIcon="&#xe65d;" Style="{StaticResource ScrollBarButton}"
                                     IsTabStop="False" Interval="50" Margin="0" Command="ScrollBar.LineUpCommand"/>
                </Border>
                <!--中间滑动区域-->
                <Track x:Name="PART_Track" IsDirectionReversed="true" Grid.Row="1">
                    <!--上滑块-->
                    <Track.DecreaseRepeatButton>
                        <RepeatButton x:Name="HorizontalLargeDecrease" Command="ScrollBar.PageUpCommand" 
                                          IsTabStop="False" Interval="50" Style="{DynamicResource ScrollBarTrackButton}" />
                    </Track.DecreaseRepeatButton>
                    <!--中间滑块-->
                    <Track.Thumb>
                        <Thumb Template="{StaticResource ThumbTemplate}" MinHeight="10"/>
                    </Track.Thumb>
                    <!--下滑块-->
                    <Track.IncreaseRepeatButton>
                        <RepeatButton x:Name="HorizontalLargeIncrease" Command="ScrollBar.PageDownCommand"
                                          IsTabStop="False" Interval="50" Style="{DynamicResource ScrollBarTrackButton}" />
                    </Track.IncreaseRepeatButton>
                </Track>
                <!--下按钮-->
                <Border Grid.Row="2" VerticalAlignment="Center" HorizontalAlignment="Center" x:Name="VerticalSmallIncrease">
                    <RepeatButton local:ControlAttachProperty.FIcon="&#xe64b;" Style="{StaticResource ScrollBarButton}"
                                     IsTabStop="False" Interval="50" Margin="0" Command="ScrollBar.LineDownCommand"/>
                </Border>
            </Grid>
            <ControlTemplate.Triggers>
                <Trigger Property="IsMouseOver" Value="true">
                    <Setter TargetName="BgInner" Property="Opacity" Value="0.5"/>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    
        <!--ScrollBar样式-->
        <Style x:Key="DefaultScrollBar" TargetType="{x:Type ScrollBar}">
            <Setter Property="SnapsToDevicePixels" Value="True" />
            <Setter Property="OverridesDefaultStyle" Value="true" />
            <Style.Triggers>
                <Trigger Property="Orientation" Value="Horizontal">
                    <Setter Property="Template" Value="{StaticResource HorizontalScrollBar}" />
                    <Setter Property="Height" Value="{StaticResource ScrollBarSize}" />
                </Trigger>
                <Trigger Property="Orientation" Value="Vertical">
                    <Setter Property="Template" Value="{StaticResource VerticalScrollBar}" />
                    <Setter Property="Width" Value="{StaticResource ScrollBarSize}" />
                </Trigger>
            </Style.Triggers>
        </Style>
    
        <!--ScrollViewer样式-->
        <Style x:Key="DefaultScrollViewer" TargetType="{x:Type ScrollViewer}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ScrollViewer}">
                        <Grid x:Name="Grid" Background="{TemplateBinding Background}">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*" x:Name="leftColumn" />
                                <ColumnDefinition Width="Auto" x:Name="rightColumn" />
                            </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="*" />
                                <RowDefinition Height="Auto" />
                            </Grid.RowDefinitions>
                            <ScrollContentPresenter x:Name="PART_ScrollContentPresenter" CanContentScroll="{TemplateBinding CanContentScroll}"
                                                    CanHorizontallyScroll="False" CanVerticallyScroll="False" ContentTemplate="{TemplateBinding ContentTemplate}"
                                                    Content="{TemplateBinding Content}" Margin="{TemplateBinding Padding}"
                                                    Grid.Row="0" Grid.Column="0" />
                            <!--垂直滚动条 -->
                            <ScrollBar x:Name="PART_VerticalScrollBar" AutomationProperties.AutomationId="VerticalScrollBar"
                                       ViewportSize="{TemplateBinding ViewportHeight}"
                                       Cursor="Arrow" Grid.Column="1" Maximum="{TemplateBinding ScrollableHeight}"
                                       Minimum="0" Grid.Row="0" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"
                                       Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"/>
                            <!--水平底部滚动条-->
                            <ScrollBar x:Name="PART_HorizontalScrollBar" AutomationProperties.AutomationId="HorizontalScrollBar"
                                       Cursor="Arrow" Grid.Column="0" Maximum="{TemplateBinding ScrollableWidth}"
                                       Minimum="0" Orientation="Horizontal" Grid.Row="1"
                                       Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"
                                       Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"
                                       ViewportSize="{TemplateBinding ViewportWidth}" />
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    
    </ResourceDictionary>
        <!--ScrollViewer样式-->
        <Style x:Key="DefaultGridViewScrollViewerStyle" TargetType="{x:Type ScrollViewer}" BasedOn="{StaticResource {x:Static GridView.GridViewScrollViewerStyleKey}}">
            <Setter Property="Focusable" Value="false" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ScrollViewer}">
                        <Grid Background="{TemplateBinding Background}" SnapsToDevicePixels="true">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="Auto" />
                            </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="*" />
                                <RowDefinition Height="Auto" />
                            </Grid.RowDefinitions>
                            <DockPanel Margin="{TemplateBinding Padding}">
                                <ScrollViewer DockPanel.Dock="Top" Focusable="false" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden">
                                    <GridViewHeaderRowPresenter AllowsColumnReorder="{Binding TemplatedParent.View.AllowsColumnReorder, RelativeSource={RelativeSource TemplatedParent}}"
                                                                ColumnHeaderContainerStyle="{Binding TemplatedParent.View.ColumnHeaderContainerStyle, RelativeSource={RelativeSource TemplatedParent}}"
                                                                ColumnHeaderToolTip="{Binding TemplatedParent.View.ColumnHeaderToolTip, RelativeSource={RelativeSource TemplatedParent}}"
                                                                ColumnHeaderStringFormat="{Binding TemplatedParent.View.ColumnHeaderStringFormat, RelativeSource={RelativeSource TemplatedParent}}"
                                                                ColumnHeaderContextMenu="{Binding TemplatedParent.View.ColumnHeaderContextMenu, RelativeSource={RelativeSource TemplatedParent}}"
                                                                ColumnHeaderTemplate="{Binding TemplatedParent.View.ColumnHeaderTemplate, RelativeSource={RelativeSource TemplatedParent}}"
                                                                Columns="{Binding TemplatedParent.View.Columns, RelativeSource={RelativeSource TemplatedParent}}"
                                                                ColumnHeaderTemplateSelector="{Binding TemplatedParent.View.ColumnHeaderTemplateSelector, RelativeSource={RelativeSource TemplatedParent}}"
                                                                Margin="0" Visibility="Visible" x:Name="PART_Header" Height="auto"
                                                                SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
                                </ScrollViewer>
                                <ScrollContentPresenter x:Name="PART_ScrollContentPresenter"
                                                        CanContentScroll="{TemplateBinding CanContentScroll}"
                                                        ContentTemplate="{TemplateBinding ContentTemplate}"
                                                        Content="{TemplateBinding Content}"
                                                        KeyboardNavigation.DirectionalNavigation="Local"
                                                        SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
                            </DockPanel>
                            <ScrollBar x:Name="PART_HorizontalScrollBar" Cursor="Arrow" Maximum="{TemplateBinding ScrollableWidth}"
                                       Minimum="0.0" Orientation="Horizontal" Grid.Row="1"
                                       Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"
                                       Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"
                                       ViewportSize="{TemplateBinding ViewportWidth}" />
                            <ScrollBar x:Name="PART_VerticalScrollBar" Cursor="Arrow" Grid.Column="1" Maximum="{TemplateBinding ScrollableHeight}"
                                       Minimum="0.0" Orientation="Vertical"
                                       Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"
                                       Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"
                                       ViewportSize="{TemplateBinding ViewportHeight}" 
                                       Style="{StaticResource DefaultScrollBar}"/>
                        </Grid>
                        <ControlTemplate.Triggers>
                            <DataTrigger Binding="{Binding Columns, ElementName=PART_Header}" Value="{x:Null}">
                                <Setter Property="Visibility" TargetName="PART_Header" Value="Collapsed"></Setter>
                            </DataTrigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
        <Style x:Key="zz" TargetType="{x:Type ListBox}">
            <Setter Property="Foreground" Value="Yellow"/>
            <Setter Property="BorderBrush" Value="{StaticResource ControlBorderBrush}" />
            <Setter Property="Background" Value="{StaticResource ItemsContentBackground2}" />
            <Setter Property="BorderThickness" Value="1" />
    
            <Setter Property="VirtualizingStackPanel.IsVirtualizing" Value="True"></Setter>
            <Setter Property="VirtualizingStackPanel.VirtualizationMode" Value="Recycling" />
            <Setter Property="OverridesDefaultStyle" Value="true" />
            <Setter Property="SelectionMode" Value="Single" />
            <Setter Property="SnapsToDevicePixels" Value="true" />
            
            <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/>
            <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
            <Setter Property="ScrollViewer.CanContentScroll" Value="True"/>
            <Setter Property="ScrollViewer.IsDeferredScrollingEnabled" Value="False" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListBox">
                        <Border x:Name="Border" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}"
                                BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="true">
                            <ScrollViewer Padding="{TemplateBinding Padding}" Style="{StaticResource DefaultGridViewScrollViewerStyle}">
                                <ItemsPresenter  SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                            </ScrollViewer>
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsGrouping" Value="true">
                                <Setter Property="ScrollViewer.CanContentScroll" Value="false" />
                            </Trigger>
                            <Trigger Property="IsEnabled" Value="false">
                                <Setter TargetName="Border" Property="Opacity" Value="{StaticResource DisableOpacity}" />
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

    调用:

            <ListBox Name="lb" Style="{StaticResource zz}" ItemTemplate="{StaticResource aa}">
            </ListBox>

    参考代码:https://www.cnblogs.com/anding/p/4987426.html

    /*******相与枕藉乎舟中,不知东方之既白*******/
  • 相关阅读:
    [PHP] yield沟通函数循环内外
    [Linux] scp本地服务器和远程服务器拷贝文件
    [Linux] 大数据库导出大文件统计并去重
    [Go] golang连接查询mysql
    [日常] 解决mysql不允许外部访问
    [Go] golang创建目录写文件判断文件
    [日常] imap协议读取邮件
    [Go] golang使用github里的imap类库
    [Go] golang无缓冲通道实现工作池控制并发
    [Go] golang的range循环遍历通道
  • 原文地址:https://www.cnblogs.com/Mars-0603/p/15357397.html
Copyright © 2020-2023  润新知