数值范围选择控件RangeSlider

RangeSlider控件用于在一个指定上下限的范围中选择一个数值范围,因此该控件的MaximumMinimum属性用于指定上下限;而SelectionStartSelectionEnd用于指定选择的范围,还有一个Change属性用于指定SelectionStartSelectionEnd的最小变化值。运行效果如下图所示。默认样式很难看,不过定制一个漂亮的样式很简单。

  

 

以下是控件的默认样式:

<Style TargetType="{ x:Type local:RangeSlider}">

        <Setter Property="Template">

            <Setter.Value>

                <ControlTemplate TargetType="{ x:Type local:RangeSlider}">

                    <Border BorderBrush="{ TemplateBinding BorderBrush}"

                            BorderThickness="{ TemplateBinding BorderThickness}"

                            Background="{ TemplateBinding Background}"

                            SnapsToDevicePixels="{ TemplateBinding SnapsToDevicePixels}">

                        <Grid Name="PART_GridContainerName">

                            <Grid.ColumnDefinitions>

                                <ColumnDefinition/>

                                <ColumnDefinition/>

                                <ColumnDefinition/>

                            </Grid.ColumnDefinitions>

                            <RepeatButton Grid.Column="0" Command="{ x:Static local:RangeSlider.MoveBackward}"/>

                            <RepeatButton Grid.Column="2" Command="{ x:Static local:RangeSlider.MoveForward}"/>

                            <Grid Grid.Column="1">

                                <Thumb Name="PART_LeftThumb" IsTabStop="False" Cursor="SizeWE" Width="5" Margin="-5 0 00" HorizontalAlignment="Left"/>

                                <Thumb Name="PART_CenterThumb" IsTabStop="False" Cursor="ScrollAll" MinWidth="5"/>

                                <Thumb Name="PART_RightThumb" IsTabStop="False" Cursor="SizeWE" Width="5" Margin="0 0 -50" HorizontalAlignment="Right"/>

                            </Grid>

                        </Grid>

                    </Border>

                </ControlTemplate>

            </Setter.Value>

        </Setter>

    </Style>

从控件的样式中可以看出,三个Thumb分别支持拖动改变开始值,结束值和同时改变两个值。两个RepeatButton支持按最小变化值同时改变开始值和结束值;按下Ctl键和左右箭头可达到相同的目的。

RangeSlider控件还实现了SelectedRangeChanged路由事件,这样就可以在SelectionStartSelectionEnd改变的时候发出事件通知。

RangeSlider控件还支持命令;也就是说它实现了ICommandSource接口,这样就可以和MVVM模式很好的结合起来。剩下也没什么好说的了,代码贴上:

using System;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Windows.Controls;

usingSystem.Windows;

usingSystem.Windows.Input;

usingSystem.Windows.Controls.Primitives;

usingSystem.ComponentModel;

 

namespace MySolution.Controls

{

    [TemplatePart(Name = GridContainerName, Type = typeof(Grid))]

    [TemplatePart(Name = LeftThumbName, Type = typeof(

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值