WPF 带刻度的滑动条实现
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BYH371256/article/details/83507170
本章讲述:带刻度的水平滑动条实现;主要通过修改Slider的样式实现。
样式主要代码
<Style x:Key="SliderRepeatButtonStyle_Horiz" TargetType="{x:Type RepeatButton}">
	<Setter Property="OverridesDefaultStyle" Value="true"/>
	<Setter Property="IsTabStop" Value="false"/>
	<Setter Property="Height" Value="2"/>
	<Setter Property="Focusable" Value="false"/>
	<Setter Property="Template">
		<Setter.Value>
			<ControlTemplate TargetType="{x:Type RepeatButton}">
				<Rectangle Fill="#2DBDFA"/>
			</ControlTemplate>
		</Setter.Value>
	</Setter>
</Style>
<Style x:Key="SliderRepeatButtonStyle_Horiz1" TargetType="RepeatButton">
	<Setter Property="OverridesDefaultStyle" Value="true"/>
	<Setter Property="IsTabStop" Value="false"/>
	<Setter Property="Height" Value="2"/>
	<Setter Property="Focusable" Value="false"/>
	<Setter Property="Template">
		<Setter.Value>
			<ControlTemplate TargetType="{x:Type RepeatButton}">
				<Rectangle Fill="White"/>
			</ControlTemplate>
		</Setter.Value>
	</Setter>
</Style>
<Geometry x:Key="SliderThumbOuterBorderGeometry">
	M9.5,5 C9.5,7.4852814 7.4852814,9.5 5,9.5 C2.5147186,9.5 0.5,7.4852814 0.5,5 C0.5,2.5147186 2.5147186,0.5 5,0.5 C7.4852814,0.5 9.5,2.5147186 9.5,5 z
</Geometry>
<Style x:Key="HorizontalSliderThumbStyle_Horiz" TargetType="{x:Type Thumb}">
	<Setter Property="Focusable" Value="false"/>
	<Setter Property="OverridesDefaultStyle" Value="true"/>
	<Setter Property="Height" Value="20"/>
	<Setter Property="Width" Value="11"/>
	<Setter Property="Foreground" Value="Transparent"/>
	<Setter Property="Template">
		<Setter.Value>
			<ControlTemplate TargetType="{x:Type Thumb}">
				<Canvas SnapsToDevicePixels="true">
					<Canvas.RenderTransform>
						<TranslateTransform X="0" Y="5.0"/>
					</Canvas.RenderTransform>
					<Path x:Name="Background"  Data="{StaticResource SliderThumbOuterBorderGeometry}" Fill="#FF1F9CF0" />
					<Path x:Name="InnerBorder" Data="{StaticResource SliderThumbOuterBorderGeometry}" Stroke="White"  />
					<Path x:Name="OuterBorder" Data="{StaticResource SliderThumbOuterBorderGeometry}" Stroke="Transparent" />
				</Canvas>
				<ControlTemplate.Triggers>
					<Trigger Property="IsMouseOver" Value="true">
						<Setter Property="Fill" TargetName="Background" Value="#FF29AFF5"/>
						<Setter Property="Stroke" TargetName="OuterBorder" Value="White"/>
					</Trigger>
					<Trigger Property="IsDragging" Value="true">
					</Trigger>
				</ControlTemplate.Triggers>
			</ControlTemplate>
		</Setter.Value>
	</Setter>
</Style>
<Style x:Key="SliderStyle_TrickBar_Horiz" TargetType="{x:Type Slider}">
	<Setter Property="Stylus.IsPressAndHoldEnabled" Value="false"/>
	<Setter Property="Background" Value="Transparent"/>
	<Setter Property="Foreground" Value="White"/>
	<Setter Property="Template">
		<Setter.Value>
			<ControlTemplate TargetType="{x:Type Slider}">
				<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"
			Background="{TemplateBinding Background}" SnapsToDevicePixels="true">
					<Grid Margin="0">
						<Grid.RowDefinitions>
							<RowDefinition Height="Auto"/>
							<RowDefinition Height="Auto" MinHeight="{TemplateBinding MinHeight}"/>
						</Grid.RowDefinitions>
						<TickBar x:Name="TopTick" Fill="{TemplateBinding Foreground}" Height="4" Placement="Top" Grid.Row="0"
					 Minimum="0" Maximum="15" Visibility="Visible"/>
						<TickBar x:Name="BottomTick" Fill="{TemplateBinding Foreground}" Height="4" Placement="Bottom"
					 Grid.Row="2" Visibility="Collapsed"/>
						<Track x:Name="PART_Track" Grid.Row="1">
							<Track.DecreaseRepeatButton>
								<RepeatButton Command="{x:Static Slider.DecreaseLarge}" Style="{StaticResource SliderRepeatButtonStyle_Horiz}"/>
							</Track.DecreaseRepeatButton>
							<Track.IncreaseRepeatButton>
								<RepeatButton Command="{x:Static Slider.DecreaseLarge}" Style="{StaticResource SliderRepeatButtonStyle_Horiz1}"
								  HorizontalAlignment="Stretch"/>
							</Track.IncreaseRepeatButton>
							<Track.Thumb>
								<Thumb x:Name="Thumb" Style="{StaticResource HorizontalSliderThumbStyle_Horiz}" Margin="0,1,0,0"/>
							</Track.Thumb>
						</Track>
					</Grid>
				</Border>
				<ControlTemplate.Triggers>
					<Trigger Property="IsSelectionRangeEnabled" Value="true">
					</Trigger>
					<Trigger Property="IsKeyboardFocused" Value="true">
						<Setter Property="Foreground" TargetName="Thumb" Value="Blue"/>
					</Trigger>
				</ControlTemplate.Triggers>
			</ControlTemplate>
		</Setter.Value>
	</Setter>
</Style>
<Style x:Key="SliderStyle_TrickBarNegative_Horiz" TargetType="{x:Type Slider}">
	<Setter Property="Stylus.IsPressAndHoldEnabled" Value="false"/>
	<Setter Property="Background" Value="Transparent"/>
	<Setter Property="Foreground" Value="White"/>
	<Setter Property="Template">
		<Setter.Value>
			<ControlTemplate TargetType="{x:Type Slider}">
				<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"
			Background="{TemplateBinding Background}" SnapsToDevicePixels="true">
					<Grid Margin="0">
						<Grid.RowDefinitions>
							<RowDefinition Height="Auto"/>
							<RowDefinition Height="Auto" MinHeight="{TemplateBinding MinHeight}"/>
						</Grid.RowDefinitions>
						<TickBar x:Name="TopTick" Fill="{TemplateBinding Foreground}" Height="4" Placement="Top" Grid.Row="0"
					 Minimum="0" Maximum="10" Visibility="Visible"/>
						<TickBar x:Name="BottomTick" Fill="{TemplateBinding Foreground}" Height="4" Placement="Bottom"
					 Grid.Row="2" Visibility="Collapsed"/>
						<Track x:Name="PART_Track" Grid.Row="1">
							<Track.DecreaseRepeatButton>
								<RepeatButton Command="{x:Static Slider.DecreaseLarge}" Style="{StaticResource SliderRepeatButtonStyle_Horiz}"/>
							</Track.DecreaseRepeatButton>
							<Track.IncreaseRepeatButton>
								<RepeatButton Command="{x:Static Slider.DecreaseLarge}" Style="{StaticResource SliderRepeatButtonStyle_Horiz1}"
								  HorizontalAlignment="Stretch"/>
							</Track.IncreaseRepeatButton>
							<Track.Thumb>
								<Thumb x:Name="Thumb" Style="{StaticResource HorizontalSliderThumbStyle_Horiz}" Margin="0,1,0,0"/>
							</Track.Thumb>
						</Track>
					</Grid>
				</Border>
				<ControlTemplate.Triggers>
					<Trigger Property="IsSelectionRangeEnabled" Value="true">
					</Trigger>
					<Trigger Property="IsKeyboardFocused" Value="true">
						<Setter Property="Foreground" TargetName="Thumb" Value="Blue"/>
					</Trigger>
				</ControlTemplate.Triggers>
			</ControlTemplate>
		</Setter.Value>
	</Setter>
</Style>
引用示例代码
<Slider Margin="2,2" x:Name="DefinitionSlider" Width="250" Minimum="0" Maximum="15" Value="5"
                IsSnapToTickEnabled="True" Style="{StaticResource SliderStyle_TrickBar_Horiz}" />
效果图

WPF 带刻度的滑动条实现的更多相关文章
- 【WPF】点击滑动条(Slider),移动滑块(Tick)到鼠标点击的位置
		问题:点击Slider控件时,滑块会自动跳到滑动条的最边缘位置,无法跳到鼠标点击的位置上. 办法:给Slider控件设置属性IsMoveToPointEnabled="True"即 ... 
- 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条
		http://blog.csdn.net/terryzero/article/details/3797782 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条 标签: swing编程 ... 
- WPF 背景颜色渐变的滑动条实现
		原文:WPF 背景颜色渐变的滑动条实现 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/BYH371256/article/details/83507 ... 
- DIV+ul+LI实现表格效果以及div带滑动条
		写这个是为了给自己一个好好的笔记,以免下次需要的时候又到处找,费神费事费时费力.开始吧! 1.先看看效果 2.网页代码 <!DOCTYPE html PUBLIC "-//W3C//D ... 
- 【JavaScript吉光片羽】--- 滑动条
		灯光的亮度控制需要一个滑动条,先借用lamp源码中Bar: var Bar = function (opt) { var defaults = { $id: "", // 进度条d ... 
- MFC 滑动条的重绘
		MFC自带的滑动条的样子是这样的. 比较难看,所以需要重绘下,重绘后的样子是这样的. 代码如下: CustomSliderCtr.h #pragma once // CCustomSliderCtr ... 
- Android  自定义带刻度的seekbar
		自定义带刻度的seekbar 1.布局 <span style="font-family:SimHei;font-size:18px;"><com.imibaby ... 
- Slider插件(滑动条,拉链)
		Slider插件(滑动条,拉链) 下载地址:http://files.cnblogs.com/elves/Slider.rar 提示:微软AJAX插件中也带此效果! 
- VC++ 中滑动条(slider控件)使用 [转+补充]
		滑动控件slider是Windows中最常用的控件之一.一般而言它是由一个滑动条,一个滑块和可选的刻度组成,用户可以通过移动滑块在相应的控件中显示对应的值.通常,在滑动控件附近一定有标签控件或编辑框控 ... 
随机推荐
- hdu-3333 Turing Tree 离线区间+树状数组(区间不同数的和)
			题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3333 题目大意: 给出一数组,以及m个查询区间,每次查询该区间不同数字的和.相同数字只加一次. 解题 ... 
- SpringMVC如何解决POST请求中文乱码问题,GET的又如何处理呢?
			在web.xml中 <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-c ... 
- [转]浅谈利用SQLite存储离散瓦片的思路和实现方法
			文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在多个项目中涉及到互联网地图的内网显示,通过自制工具完成了互联 ... 
- Android攻城狮学习笔记—入门篇一
			第一章 搭建Android开发环境 1.1 环境组成 JDK(Java Development Kit) Eclipse Android SDK(Software Development Kit) A ... 
- rsync + mysql + gzip  +  --single-transaction
			1.rsync -avz 172.16.2.61:~/vs/program/elasticsearch-5.0.0 --exclude=elasticsearch-5.0.0/data/* ./ 从其 ... 
- centos  腾讯云 今天买了 18个月
			1.安装开发编译工具包 yum groupinstall "Development Tools" 2.查看Linux 下用户 对系统资源的占用情况,root表示用户 top -u ... 
- 小程序的get和post需要注意的地方
			在进行异步请求之前先去小程序后台配置好服务器域名. get请求:header: { 'content-type':'json'}就可以. post请求:header: { 'content-type' ... 
- 系统构架篇之基于SSDB的二级缓存
			1.什么是ssdb 你可以把ssdb理解成redis.不同之处在于redis缓存的数据是在内存中的,所能缓存的数据大小受内存大小的限制,一般不适合缓存大量的数据.而ssdb将数据保存在磁盘中,数据量大 ... 
- jdk1.8换成1.7
			电脑中装了jdk1.7,然后又装了1.8, 后来项目需要1.7,就把path环境变量中的java_home改成了1.7. 然后控制台输入java_version,后提示如下: Error: Regis ... 
- 在express中HMR(合并express和webpack-dev-server)
			在学习react的时候,经常用create-react-app来创建web应用,然而写到后面总有连自己服务器和数据库的需求,create-react-app创建的是一个webpack-dev-serv ... 
