自定义滑动滚动条

预期目标:横向滚动条,可以左右滑动,用鼠标按住(触摸)然后释放可以实现快速滑动。

我们有几种方案:

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的更多相关文章

  1. WPF 自定义BarChartControl(可左右滑动的柱状图)

    自定义可左右滑动.拖拽滑动的平面柱状图 在做这种样式控件之前,可先浏览我之前预研的控件: A.自定义左右滑动ScrollViewer(可拖动滑动) B.自定义Bar柱状图 OK,现在说下控件具体设计过 ...

  2. WPF 自定义BarChartControl(可左右滑动的柱状图)(转)

    自定义可左右滑动.拖拽滑动的平面柱状图 在做这种样式控件之前,可先浏览我之前预研的控件: A.自定义左右滑动ScrollViewer(可拖动滑动) B.自定义Bar柱状图 OK,现在说下控件具体设计过 ...

  3. WPF自定义TextBox及ScrollViewer

    原文:WPF自定义TextBox及ScrollViewer 寒假过完,在家真心什么都做不了,可能年龄大了,再想以前那样能专心坐下来已经不行了.回来第一件事就是改了项目的一个bug,最近又新增了一个新的 ...

  4. WPF 自定义ComboBox样式,自定义多选控件

    原文:WPF 自定义ComboBox样式,自定义多选控件 一.ComboBox基本样式 ComboBox有两种状态,可编辑和不可编辑状态.通过设置IsEditable属性可以切换控件状态. 先看基本样 ...

  5. WPF 自定义MenuItem样式

    原文:WPF 自定义MenuItem样式 一.前言 默认的MenuItem样式比较普通,这次自定义MenuItem的样式也只是对MenuItem的颜色风格进行变化.需要其他功能的变化,大家可以根据样式 ...

  6. WPF 自定义 MessageBox (相对完善版 v1.0.0.6)

    基于WPF的自定义 MessageBox. 众所周知WPF界面美观.大多数WPF元素都可以简单的修改其样式,从而达到程序的风格统一.可是当你不得不弹出一个消息框通知用户消息时(虽然很不建议在程序中频繁 ...

  7. WPF 自定义ScrollViwer

    ScrollViewer自定义样式 ScrollViewer在各种列表.集合控件中广泛使用的基础组建,先看看效果图: 如上图,ScrollViewer简单来说分两部分,一个横向的滚动条,一个垂直滚动条 ...

  8. WPF自定义选择年月控件详解

    本文实例为大家分享了WPF自定义选择年月控件的具体代码,供大家参考,具体内容如下 封装了一个选择年月的控件,XAML代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...

  9. WPF 自定义的图表(适用大量数据绘制)下

    原文:WPF 自定义的图表(适用大量数据绘制)下 上一篇文章中讲了WPF中自定义绘制大量数据的图标,思路是先将其绘制在内存,然后一次性加载到界面,在后续的调试过程中,发现当数据量到达10W时,移动鼠标 ...

随机推荐

  1. atitit.软件与sql设计模式原理与本质 大总结attialx总结v6 qc26.docx

    atitit.软件与sql设计模式原理与本质 大总结attialx总结v6 qc26.docx 1.1. 版本历史2 2. 设计模式是什么2 2.1. 模式就是在一种场合下对某个问题的一个解决方案.& ...

  2. windows下使用VS2015编译V8 JavaScript引擎(v5.5 - 2016/09)

    今天心血来潮, 下载了 v8,,然后就想着用vs编译 但是大家都苦恼的是 v8并不直接提供 vs用的项目文件和解决方案(.sln) 于是,在网上搜来搜去, 折腾来折腾去的; 终于一点一点的尝试, 可以 ...

  3. ASP.NET MVC5+EF6+EasyUI 后台管理系统(33)-MVC 表单验证

    系列目录 注:本节阅读需要有MVC 自定义验证的基础,否则比较吃力 一直以来表单的验证都是不可或缺的,微软的东西还是做得比较人性化的,从webform到MVC,都做到了双向验证 单单的用js实现的前端 ...

  4. HTML5 学习总结(一)——HTML5概要与新增标签

    一.HTML5概要 1.1.为什么需要HTML5 HTML4陈旧不能满足日益发展的互联网需要,特别是移动互联网.为了增强浏览器功能Flash被广泛使用,但安全与稳定堪忧,不适合在移动端使用(耗电.触摸 ...

  5. nodejs中流(stream)的理解

    nodejs的fs模块并没有提供一个copy的方法,但我们可以很容易的实现一个,比如: var source = fs.readFileSync('/path/to/source', {encodin ...

  6. 【NLP】基于统计学习方法角度谈谈CRF(四)

    基于统计学习方法角度谈谈CRF 作者:白宁超 2016年8月2日13:59:46 [摘要]:条件随机场用于序列标注,数据分割等自然语言处理中,表现出很好的效果.在中文分词.中文人名识别和歧义消解等任务 ...

  7. 如果你也会C#,那不妨了解下F#(6):面向对象编程之“类”

    前言 面向对象的思想已经非常成熟,而使用C#的程序员对面向对象也是非常熟悉,所以我就不对面向对象进行介绍了,在这篇文章中将只会介绍面向对象在F#中的使用. F#是支持面向对象的函数式编程语言,所以你用 ...

  8. 使用backbone的history管理SPA应用的url

    本文介绍如何使用backbone的history模块实现SPA应用里面的URL管理.SPA应用的核心在于使用无刷新的方式更改url,从而引发页面内容的改变.从实现上来看,url的管理和页面内容的管理是 ...

  9. 学习EF之贪婪加载和延迟加载(1)

    从暑假开始接触code first以来,一直感觉很好用,主要在于开发过程中以业务为中心可以随时修改数据模型生成数据库,还有一个原因就是查询起来很方便 这里找了一个以前database first的一段 ...

  10. 【C#】给无窗口的进程发送消息

    注:本文适用.net2.0+的winform程序 一个winform程序,我希望它不能多开(但是如何防多开不是本文要讲的),那么在用户启动第二个实例的时候,作为第二个实例来说,大概可以有这么几种做法: ...