WPF 自定义滑动ScrollViewer
自定义滑动滚动条
预期目标:横向滚动条,可以左右滑动,用鼠标按住(触摸)然后释放可以实现快速滑动。
我们有几种方案:
1、ScrollViewer,修改其中的横向滚动条,将其中的背景设置为透明。
但是,存在的问题是,没有快速滑动的效果
2、ListBox,修改Panel为WrapPanel,或者直接将内容作为ItemSource填充进去。
这个能实现多个子元素切换的效果,但是针对单个或者一个区域的内容,就有点大材小用了。
3、用DevExpress中的LayoutControl、ScrollBox控件--经尝试后,很不错

1、添加LayoutControl控件或者ScrollBox。如果没有安装Dev控件,请自行下载 Dev下载地址

2、修改ScrollBox中的横向滚动条模板,设置属性
<dxlc:ScrollBox x:Name="MyScrollBox" HorizontalScrollBarStyle="{StaticResource ScrollBarStyle1}" VerticalAlignment="Center">
<StackPanel Orientation="Horizontal">
<!--放置内容-->
</StackPanel>
</dxlc:ScrollBox>
样式:
<Style x:Key="ScrollBarStyle1" TargetType="{x:Type ScrollBar}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ScrollBar}">
<Grid Height="0"></Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
3、往ScrollBox中添加内容,这里我们的滑动效果已经做好了。
案例:
<dxlc:ScrollBox x:Name="MyScrollBox" HorizontalScrollBarStyle="{StaticResource ScrollBarStyle1}" VerticalAlignment="Center">
<StackPanel Orientation="Horizontal">
<!--放置内容-->
<TextBlock Text="1" Width="100" Height="200" Background="Red"></TextBlock>
<TextBlock Text="2" Width="100" Height="200" Background="CornflowerBlue"></TextBlock>
<TextBlock Text="3" Width="100" Height="200" Background="Brown"></TextBlock>
<TextBlock Text="4" Width="100" Height="200" Background="Aqua"></TextBlock>
<TextBlock Text="5" Width="100" Height="200" Background="DarkCyan"></TextBlock>
<TextBlock Text="6" Width="100" Height="200" Background="Red"></TextBlock>
<TextBlock Text="7" Width="100" Height="200" Background="Salmon"></TextBlock>
<TextBlock Text="8" Width="100" Height="200" Background="Silver"></TextBlock>
<TextBlock Text="2" Width="100" Height="200" Background="CornflowerBlue"></TextBlock>
<TextBlock Text="3" Width="100" Height="200" Background="Brown"></TextBlock>
<TextBlock Text="4" Width="100" Height="200" Background="Aqua"></TextBlock>
<TextBlock Text="5" Width="100" Height="200" Background="DarkCyan"></TextBlock>
</StackPanel>
</dxlc:ScrollBox>
4、如果想要左右细微的调节滑动,我们可以另外添加俩个按钮去点击滑动
<Button x:Name="BtnLeft" Height="28" Click="BtnLeft_OnClick" Background="Transparent" Content="向左滑" HorizontalAlignment="Left">
<Button.Template>
<ControlTemplate TargetType="Button">
<Grid>
<Path Stroke="DodgerBlue" StrokeThickness="5" Data="M10,14 25,0"></Path>
<Path Stroke="DodgerBlue" StrokeThickness="5" Data="M10,11 25,25"></Path>
</Grid>
</ControlTemplate>
</Button.Template>
</Button>
<Button x:Name="BtnRight" Height="28" Click="BtnRight_OnClick" Background="Transparent" Content="向右滑" HorizontalAlignment="Right">
<Button.Template>
<ControlTemplate TargetType="Button">
<Grid>
<Path Stroke="DodgerBlue" StrokeThickness="5" Data="M15,14 0,0"></Path>
<Path Stroke="DodgerBlue" StrokeThickness="5" Data="M15,11 0,25"></Path>
</Grid>
</ControlTemplate>
</Button.Template>
</Button>
后台对应的事件处理:
private void BtnLeft_OnClick(object sender, RoutedEventArgs e)
{
MyScrollBox.HorizontalOffset += ;
}
private void BtnRight_OnClick(object sender, RoutedEventArgs e)
{
MyScrollBox.HorizontalOffset -= ;
}
GitHub下载地址:https://github.com/Kybs0/ScrollBoxStyle
WPF 自定义滑动ScrollViewer的更多相关文章
- WPF 自定义BarChartControl(可左右滑动的柱状图)
自定义可左右滑动.拖拽滑动的平面柱状图 在做这种样式控件之前,可先浏览我之前预研的控件: A.自定义左右滑动ScrollViewer(可拖动滑动) B.自定义Bar柱状图 OK,现在说下控件具体设计过 ...
- WPF 自定义BarChartControl(可左右滑动的柱状图)(转)
自定义可左右滑动.拖拽滑动的平面柱状图 在做这种样式控件之前,可先浏览我之前预研的控件: A.自定义左右滑动ScrollViewer(可拖动滑动) B.自定义Bar柱状图 OK,现在说下控件具体设计过 ...
- WPF自定义TextBox及ScrollViewer
原文:WPF自定义TextBox及ScrollViewer 寒假过完,在家真心什么都做不了,可能年龄大了,再想以前那样能专心坐下来已经不行了.回来第一件事就是改了项目的一个bug,最近又新增了一个新的 ...
- WPF 自定义ComboBox样式,自定义多选控件
原文:WPF 自定义ComboBox样式,自定义多选控件 一.ComboBox基本样式 ComboBox有两种状态,可编辑和不可编辑状态.通过设置IsEditable属性可以切换控件状态. 先看基本样 ...
- WPF 自定义MenuItem样式
原文:WPF 自定义MenuItem样式 一.前言 默认的MenuItem样式比较普通,这次自定义MenuItem的样式也只是对MenuItem的颜色风格进行变化.需要其他功能的变化,大家可以根据样式 ...
- WPF 自定义 MessageBox (相对完善版 v1.0.0.6)
基于WPF的自定义 MessageBox. 众所周知WPF界面美观.大多数WPF元素都可以简单的修改其样式,从而达到程序的风格统一.可是当你不得不弹出一个消息框通知用户消息时(虽然很不建议在程序中频繁 ...
- WPF 自定义ScrollViwer
ScrollViewer自定义样式 ScrollViewer在各种列表.集合控件中广泛使用的基础组建,先看看效果图: 如上图,ScrollViewer简单来说分两部分,一个横向的滚动条,一个垂直滚动条 ...
- WPF自定义选择年月控件详解
本文实例为大家分享了WPF自定义选择年月控件的具体代码,供大家参考,具体内容如下 封装了一个选择年月的控件,XAML代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...
- WPF 自定义的图表(适用大量数据绘制)下
原文:WPF 自定义的图表(适用大量数据绘制)下 上一篇文章中讲了WPF中自定义绘制大量数据的图标,思路是先将其绘制在内存,然后一次性加载到界面,在后续的调试过程中,发现当数据量到达10W时,移动鼠标 ...
随机推荐
- c#操作MangoDB 之MangoDB CSharp Driver驱动详解
序言 MangoDB CSharp Driver是c#操作mongodb的官方驱动. 官方Api文档:http://api.mongodb.org/csharp/2.2/html/R_Project_ ...
- TextView使用大全
最近打算写一个系列的android初级开发教程,预计40篇以上的文章,结合我实际工作中的经验,写一些工作中经常用到的技术,让初学者可以少走弯路,写一个系列的话,大家学习起来也有头有尾. 今天就从我们每 ...
- TCP三次握手的正确使用姿势
背景 和女朋友异地恋一年多,为了保持感情我提议每天晚上视频聊天一次. 从好上开始,到现在,一年多也算坚持下来了. 问题 有时候聊天的过程中,我的网络或者她的网络可能会不好,视频就会卡住,听不到对方的声 ...
- java监控之ManagementFactory分析
The ManagementFactory class is a factory class for getting managed beans for the Java platform. This ...
- 【干货】用大白话聊聊JavaSE — ArrayList 深入剖析和Java基础知识详解(二)
在上一节中,我们简单阐述了Java的一些基础知识,比如多态,接口的实现等. 然后,演示了ArrayList的几个基本方法. ArrayList是一个集合框架,它的底层其实就是一个数组,这一点,官方文档 ...
- Python中的类、对象、继承
类 Python中,类的命名使用帕斯卡命名方式,即首字母大写. Python中定义类的方式如下: class 类名([父类名[,父类名[,...]]]): pass 省略父类名表示该类直接继承自obj ...
- scikit-learn一般实例之四:使用管道和GridSearchCV选择降维
本例构建一个管道来进行降维和预测的工作:先降维,接着通过支持向量分类器进行预测.本例将演示与在网格搜索过程进行单变量特征选择相比,怎样使用GrideSearchCV和管道来优化单一的CV跑无监督的PC ...
- Angular2 小贴士 RouterLink 导航
AngularJS的路由一直是学习的一大难点,我们只能边看边学边掌握,边看边学边推翻.今天我们来看一下在angular2中通过routerLink实现导航的几种方式,以及各自的优缺点. Angular ...
- 几道web前端练习题目
在 HTML 语言中,以下哪个属性不是通用属性?A]<class>B]<title>C]<href>D]<style> 在线练习:http://hove ...
- Oracle用户被锁原因及办法
Oracle用户被锁原因及办法 在登陆时被告知test用户被锁 1.用dba角色的用户登陆,进行解锁,先设置具体时间格式,以便查看具体时间 SQL> alter session set nl ...