WPF ScrollViewer样式

本文介绍如何自定义WPF中的ScrollViewer组件样式,包括滚动条的外观和行为,帮助提升应用程序界面的视觉效果和用户体验。
摘要由CSDN通过智能技术生成

效果



scrollviewer Style:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="clr-namespace:ImageButtonTest01.Themes">

    <ControlTemplate x:Key="scrollViewerControlTemplate" TargetType="{x:Type ScrollViewer}">
        <Grid x:Name="Grid" Background="{TemplateBinding Background}">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="Auto"/>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="*"/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>

            <!--右下角-->
            <!--<Rectangle x:Name="Corner" Grid.Column="1" Fill="#A0FFBD7B" Grid.Row="1"/>-->

            <ScrollContentPresenter x:Name="PART_ScrollContentPresenter" Grid.Row="0" Grid.Column="0" 
                                    CanContentScroll="{TemplateBinding CanContentScroll}"
                                    CanHorizontallyScroll="False" CanVerticallyScroll="False"
                                    ContentTemplate="{TemplateBinding ContentTemplate}" 
                                    Content="{TemplateBinding Content}"
                                    Margin="{TemplateBinding Padding}"/>
            <ScrollBar x:Name="PART_VerticalScrollBar" Grid.Row="0" Grid.RowSpan="2" Grid.Column="1"
                       AutomationProperties.AutomationId="VerticalScrollBar" 
                       Cursor="Arrow"
                       Width="24"
                       Maximum="{TemplateBinding ScrollableHeight}" Minimum="0" 
                       Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" 
                       Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" 
                       ViewportSize="{TemplateBinding ViewportHeight}" 
                       Style="{DynamicResource ScrollBarDefaultStyle}"/>
            <ScrollBar x:Name="PART_HorizontalScrollBar"  Grid.Row="1" Grid.Column="0"
                       AutomationProperties.AutomationId="HorizontalScrollBar" 
                       Cursor="Arrow"
                       Height="24"
                       Maximum="{TemplateBinding ScrollableWidth}" Minimum="0" 
                       Orientation="Horizontal"
                       Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" 
                       Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" 
                       ViewportSize="{TemplateBinding ViewportWidth}" 
                       Style="{DynamicResource ScrollBarDefaultStyle}"/>
        </Grid>

        <ControlTemplate.Triggers>
            <DataTrigger Binding="{Binding Path=VerticalScrollBarVisibility, RelativeSource={RelativeSource Self}}" Value="Visible">
                <Setter TargetName="PART_VerticalScrollBar" Property="Grid.RowSpan" Value="2" />
            </DataTrigger>

            <DataTrigger Binding="{Binding Path=VerticalScrollBarVisibility, RelativeSource={RelativeSource Self}}" Value="Hidden">
                <Setter TargetName="PART_VerticalScrollBar" Property="Grid.RowSpan" Value="1" />
                <Setter TargetName="PART_HorizontalScrollBar" Property="Margin" Value="2,0,2,0" />
            </DataTrigger>

            <DataTrigger Binding="{Binding Path=VerticalScrollBarVisibility, RelativeSource={RelativeSource Self}}" Value="Disabled">
                <Setter TargetName="PART_VerticalScrollBar" Property="Grid.RowSpan" Value="1" />
                <Setter TargetName="PART_HorizontalScrollBar" Property="Margin" Value="2,0,2,0" />
            </DataTrigger>
            <!--<Trigger Property="IsMouseOver" Value="true">
                <Setter Property="BorderBrush" Value="Red"/>
            </Trigger>-->
        </ControlTemplate.Triggers>
    </ControlTemplate>

    <Style x:Key="scrollviewerDefaultStyle" TargetType="{x:Type ScrollViewer}">
        <Setter Property="BorderBrush" Value="LightGray"/>
        <Setter Property="BorderThickness" Value="2"/>
        <Setter Property="HorizontalContentAlignment" Value="Left"/>
        <Setter Property="HorizontalScrollBarVisibility" Value="Auto"/>
        <Setter Property="VerticalContentAlignment" Value="Top"/>
        <Setter Property="VerticalScrollBarVisibility" Value="Auto"/>
        <Setter Property="Template" Value="{StaticResource scrollViewerControlTemplate}"/>
    </Style>
</ResourceDictionary>

ScrollBar Style:

<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:ImageButtonTest01.Themes">




    <Style x:Key="FocusVisual">
        <Setter Property="Control.Template">
            <Setter.Value>
                <ControlTemplate>
                    <Rectangle Margin="2" SnapsToDevicePixels="true" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeThickness="1" StrokeDashArray="1 2"/>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>


    <SolidColorBrush x:Key="ScrollBar.Static.Background" Color="#F0F0F0"/>
    <SolidColorBrush x:Key="ScrollBar.Static.Border" Color="#F0F0F0"/>
    <SolidColorBrush x:Key="ScrollBar.Pressed.Glyph" Color="#FFFFFF"/>
    <SolidColorBrush x:Key="ScrollBar.MouseOver.Glyph" Color="#000000"/>
    <SolidColorBrush x:Key="ScrollBar.Disabled.Glyph" Color="#BFBFBF"/>
    <SolidColorBrush x:Key="ScrollBar.Static.Glyph" Color="#606060"/>
    
    <SolidColorBrush x:Key="ScrollBar.MouseOver.Background" Color="#505A7E8F"/>
    <SolidColorBrush x:Key="ScrollBar.MouseOver.Border" Color="#505A7E8F"/>
    <SolidColorBrush x:Key="ScrollBar.Pressed.Background" Color="#A05A7E8F"/>
    <SolidColorBrush x:Key="ScrollBar.Pressed.Border" Color="#A05A7E8F"/>
    <SolidColorBrush x:Key="ScrollBar.Disabled.Background" Color="#F0F0F0"/>
    <SolidColorBrush x:Key="ScrollBar.Disabled.Border" Color="#F0F0F0"/>




    <!--ScrollBarButton-->
    <SolidColorBrush x:Key="ScrollBarButton.Static.Background" Color="#FFFFD3A8"/>
    <SolidColorBrush x:Key="ScrollBarButton.MouseMove.Background" Color="#A0FFD3A8"/>
    <SolidColorBrush x:Key="ScrollBarButton.Pressed.Background" Color="#A0FFBD7B"/>
    <SolidColorBrush x:Key="ScrollBarButton.Disabled.Background" Color="#FFFFEFDF"/>


    <Style x:Key="ScrollBarButton" TargetType="{x:Type RepeatButton}">
        <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/>
        <Setter Property="BorderThickness" Value="1"/>
        <Setter Property="HorizontalContentAlignment" Value="Center"/>
        <Setter Property="VerticalContentAlignment" Value="Center"/>
        <Setter Property="Padding" Value="1"/>
        <Setter Property="Focusable" Value="false"/>
        <Setter Property="IsTabStop" Value="false"/>
        <Setter Property="Template">
            <Sett
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

OneOnce

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

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

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

打赏作者

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

抵扣说明:

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

余额充值