WPF ScrollViewer 滚动条鼠标移入移出及鼠标按下拖动时的外观样式
2017-10-19 16:16
1296 查看
在WPF 中自定义ScrollViewer的样式实现的效果如下图所示:
主要是鼠标移入显示滚动条,移出鼠标滚动条消失,按住拖拽改变滚动条外观颜色等;
关键点几个点是:
1:在ScrollViewer 的自定义模板中 定义好如下几个事件触发器:
<EventTrigger RoutedEvent="ScrollChanged">
用于滚动条滚动时的触发显示;
<EventTrigger RoutedEvent="MouseEnter"
用于响应鼠标移入时显示滚动条
<EventTrigger RoutedEvent="MouseLeave"
用于响应鼠标移出时滚动条消失
2:当按住滚动滑块时,滑块的外观颜色变化:
ScrollViewer的滑块就是Thumb,在自定义Thumb的模板中响应IsDragging属性,改变模板中自定义的元素外观属性就可以达到效果。
网上找了很多自定义样式都没有谈到按下后滚动滑块颜色改变的效果,折腾了一会才找到通过IsDragging可以实现。
一个完整的ScrollViewer样式贴下面,记录于此,供日后查阅方便:
<Style x:Key="ScrollBarThumb" TargetType="{x:Type Thumb}">
<Setter Property="OverridesDefaultStyle" Value="true"/>
<Setter Property="BorderBrush" Value="White"/>
<Setter Property="IsTabStop" Value="false"/>
<Setter Property="Opacity" Value="1"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Thumb}">
<Rectangle x:Name="recThumb" Fill="{TemplateBinding BorderBrush}" RadiusX="3" RadiusY="3" />
<ControlTemplate.Triggers>
<Trigger Property="IsDragging" Value="True">
<Setter Property="Fill" TargetName="recThumb" Value="#606060"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
主要是鼠标移入显示滚动条,移出鼠标滚动条消失,按住拖拽改变滚动条外观颜色等;
关键点几个点是:
1:在ScrollViewer 的自定义模板中 定义好如下几个事件触发器:
<EventTrigger RoutedEvent="ScrollChanged">
用于滚动条滚动时的触发显示;
<EventTrigger RoutedEvent="MouseEnter"
用于响应鼠标移入时显示滚动条
<EventTrigger RoutedEvent="MouseLeave"
用于响应鼠标移出时滚动条消失
2:当按住滚动滑块时,滑块的外观颜色变化:
ScrollViewer的滑块就是Thumb,在自定义Thumb的模板中响应IsDragging属性,改变模板中自定义的元素外观属性就可以达到效果。
网上找了很多自定义样式都没有谈到按下后滚动滑块颜色改变的效果,折腾了一会才找到通过IsDragging可以实现。
一个完整的ScrollViewer样式贴下面,记录于此,供日后查阅方便:
<Style x:Key="ScrollBarThumb" TargetType="{x:Type Thumb}">
<Setter Property="OverridesDefaultStyle" Value="true"/>
<Setter Property="BorderBrush" Value="White"/>
<Setter Property="IsTabStop" Value="false"/>
<Setter Property="Opacity" Value="1"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Thumb}">
<Rectangle x:Name="recThumb" Fill="{TemplateBinding BorderBrush}" RadiusX="3" RadiusY="3" />
<ControlTemplate.Triggers>
<Trigger Property="IsDragging" Value="True">
<Setter Property="Fill" TargetName="recThumb" Value="#606060"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="HorizontalScrollBarPageButton" TargetType="{x:Type RepeatButton}"> <Setter Property="OverridesDefaultStyle" Value="true"/> <Setter Property="Background" Value="Transparent"/> <Setter Property="Focusable" Value="false"/> <Setter Property="IsTabStop" Value="false"/> <Setter Property="Opacity" Value="0"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type RepeatButton}"> <Rectangle Fill="{TemplateBinding Background}" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}"/> </ControlTemplate> </Setter.Value> </Setter> </Style> <Style x:Key="VerticalScrollBarPageButton" TargetType="{x:Type RepeatButton}"> <Setter Property="OverridesDefaultStyle" Value="true"/> <Setter Property="Background" Value="Transparent"/> <Setter Property="Focusable" Value="false"/> <Setter Property="IsTabStop" Value="false"/> <Setter Property="Opacity" Value="0"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type RepeatButton}"> <Rectangle Fill="{TemplateBinding Background}" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}"/> </ControlTemplate> </Setter.Value> </Setter> </Style>
<Style x:Key="for_scrollbar" TargetType="{x:Type ScrollBar}"> <Setter Property="Stylus.IsPressAndHoldEnabled" Value="false"/> <Setter Property="Stylus.IsFlicksEnabled" Value="false"/> <Setter Property="Background" Value="Transparent"/> <Setter Property="Margin" Value="0,1,0,6"/> <Setter Property="Width" Value="10"/> <Setter Property="MinWidth" Value="10"/> <Setter Property="Opacity" Value="0"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ScrollBar}"> <Grid x:Name="Bg" SnapsToDevicePixels="true"> <Track x:Name="PART_Track" IsEnabled="{TemplateBinding IsMouseOver}" IsDirectionReversed="true"> <Track.DecreaseRepeatButton> <RepeatButton Style="{StaticResource VerticalScrollBarPageButton}" Command="{x:Static ScrollBar.PageUpCommand}"/> </Track.DecreaseRepeatButton> <Track.IncreaseRepeatButton> <RepeatButton Style="{StaticResource VerticalScrollBarPageButton}" Command="{x:Static ScrollBar.PageDownCommand}"/> </Track.IncreaseRepeatButton> <Track.Thumb> <Thumb Style="{StaticResource ScrollBarThumb}"/> </Track.Thumb> </Track> </Grid> </ControlTemplate> </Setter.Value> </Setter> <Style.Triggers> <Trigger Property="Orientation" Value="Horizontal"> <Setter Property="Background" Value="Transparent"/> <Setter Property="Margin" Value="1,0,6,0"/> <Setter Property="Height" Value="10"/> <Setter Property="MinHeight" Value="10"/> <Setter Property="Width" Value="Auto"/> <Setter Property="Opacity" Value="0"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ScrollBar}"> <Grid x:Name="Bg" SnapsToDevicePixels="true"> <Track x:Name="PART_Track" IsEnabled="{TemplateBinding IsMouseOver}"> <Track.DecreaseRepeatButton> <RepeatButton Style="{StaticResource HorizontalScrollBarPageButton}" Command="{x:Static ScrollBar.PageLeftCommand}"/> </Track.DecreaseRepeatButton> <Track.IncreaseRepeatButton> <RepeatButton Style="{StaticResource HorizontalScrollBarPageButton}" Command="{x:Static ScrollBar.PageRightCommand}"/> </Track.IncreaseRepeatButton> <Track.Thumb> <Thumb Style="{StaticResource ScrollBarThumb}"/> </Track.Thumb> </Track> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Trigger> </Style.Triggers> </Style>
<!-- ScrollViewer --> <Style TargetType="{x:Type ScrollViewer}"> <Setter Property="BorderBrush" Value="LightGray"/> <Setter Property="BorderThickness" Value="0"/> <Setter Property="HorizontalContentAlignment" Value="Left"/> <Setter Property="HorizontalScrollBarVisibility" Value="Auto"/> <Setter Property="VerticalContentAlignment" Value="Top"/> <Setter Property="VerticalScrollBarVisibility" Value="Auto"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ScrollViewer}"> <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="True"> <Grid Background="{TemplateBinding Background}"> <ScrollContentPresenter Cursor="{TemplateBinding Cursor}" Margin="{TemplateBinding Padding}" ContentTemplate="{TemplateBinding ContentTemplate}"/> <ScrollBar x:Name="PART_VerticalScrollBar" Opacity="1" HorizontalAlignment="Right" Maximum="{TemplateBinding ScrollableHeight}" Orientation="Vertical" Style="{StaticResource for_scrollbar}" ViewportSize="{TemplateBinding ViewportHeight}" Value="{TemplateBinding VerticalOffset}" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" Width="10"/> <ScrollBar x:Name="PART_HorizontalScrollBar" Opacity="1" Maximum="{TemplateBinding ScrollableWidth}" Orientation="Horizontal" Style="{StaticResource for_scrollbar}" VerticalAlignment="Bottom" Value="{TemplateBinding HorizontalOffset}" ViewportSize="{TemplateBinding ViewportWidth}" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" Height="10"/> </Grid> </Border> <ControlTemplate.Triggers> <EventTrigger RoutedEvent="ScrollChanged"> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetName="PART_VerticalScrollBar" Storyboard.TargetProperty="Opacity" To="1" Duration="0:0:1"/> <DoubleAnimation Storyboard.TargetName="PART_VerticalScrollBar" Storyboard.TargetProperty="Opacity" To="0" Duration="0:0:1" BeginTime="0:0:1"/> <!--<DoubleAnimation Storyboard.TargetName="PART_HorizontalScrollBar" Storyboard.TargetProperty="Opacity" To="1" Duration="0:0:1"/> <DoubleAnimation Storyboard.TargetName="PART_HorizontalScrollBar" Storyboard.TargetProperty="Opacity" To="0" Duration="0:0:1" BeginTime="0:0:1"/>--> </Storyboard> </BeginStoryboard> </EventTrigger> <EventTrigger RoutedEvent="MouseEnter" SourceName="PART_VerticalScrollBar"> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetName="PART_VerticalScrollBar" Storyboard.TargetProperty="Opacity" To="1" Duration="0:0:1"/> </Storyboard> </BeginStoryboard> </EventTrigger> <EventTrigger RoutedEvent="MouseLeave" SourceName="PART_VerticalScrollBar"> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetName="PART_VerticalScrollBar" Storyboard.TargetProperty="Opacity" To="0" Duration="0:0:1"/> </Storyboard> </BeginStoryboard> </EventTrigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style>
相关文章推荐
- WPF ScrollViewer 样式
- 鼠标移入/移出改变样式
- 动态添加class名,改变标签样式(包含鼠标移入、移出及点击事件)
- <li>的鼠标移入移出事件和点击事件分别实现为当前li添加样式,删除其他li样式
- WPF ScrollViewer样式
- Ferris教程学习笔记:js示例2.4 鼠标移入改变样式,鼠标移出恢复
- WPF ScrollViewer(滚动条) 自定义样式表制作 图文并茂
- WPF的ScrollViewer鼠标的滚动
- vue鼠标移入添加class样式,鼠标移出去除样式(active)
- 【WPF】样式与模板:鼠标移入/悬浮时按钮的背景色不改变
- 鼠标移入移出,样式修改,显示隐藏提示消息
- WPF Button 样式 鼠标移入发光
- 简单的鼠标移出移入样式改变
- WPF的ScrollViewer鼠标的滚动
- Wpf ScrollViewer with WrapPanel 使用鼠标滚轮水平滚动内容
- 鼠标移入移出改变样式
- WPF ScrollViewer 自定义样式
- WPF ScrollViewer(滚动条) 自定义样式表制作 图文并茂
- 原生javascript学习:鼠标移入移出改变样式
- 滚动条——WPF ScrollViewer的应用