下面看一个Tick控件的例子,这只是演示,Tick单独使用没有意义。

  1. <TickBar Height="15" Width="180" Ticks="10,35,50,70" Maximum="100"
  2. Minimum="0" Fill="DarkMagenta" Placement="Top" />

好了,现在我们可以自定义一个Slider,这个例子是水平的,它用一个Grid来布局,共三行,最上和最下行分别放一个TickBar用于显示刻度,中间放一个Track为主体部分。

为了能动态显示刻度值,我们把Slider的Value属性绑定到TextBlock的Text属性,这样,只要Slider控件的值发生改变,TextBlock中就能动态显示,前面我们说过了,WPF的属性系统都是依赖项属性,因此可以动态关联。

  1. <Window x:Class="Sample_TickBar.Win2"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. Title="Win2" Height="300" Width="550">
  5. <Window.Resources>
  6. <Style x:Key="StyleForRepeatButton" TargetType="{x:Type RepeatButton}">
  7. <Style.Setters>
  8. <Setter Property="Background">
  9. <Setter.Value>
  10. <LinearGradientBrush
  11. StartPoint="0.5,0"
  12. EndPoint="0.5,1">
  13. <GradientStop Color="LightGreen" Offset="0"/>
  14. <GradientStop Color="Yellow" Offset="1"/>
  15. </LinearGradientBrush>
  16. </Setter.Value>
  17. </Setter>
  18. <Setter Property="Height" Value="10"/>
  19. <Setter Property="BorderBrush" Value="Transparent"/>
  20. <Setter Property="Focusable" Value="False"/>
  21. </Style.Setters>
  22. <Style.Triggers>
  23. <Trigger Property="IsPressed" Value="True">
  24. <Setter Property="Background">
  25. <Setter.Value>
  26. <LinearGradientBrush StartPoint="0.5,0"
  27. EndPoint="0.5,1">
  28. <GradientStop Color="LightBlue" Offset="0"/>
  29. <GradientStop Color="SkyBlue" Offset="1"/>
  30. </LinearGradientBrush>
  31. </Setter.Value>
  32. </Setter>
  33. </Trigger>
  34. </Style.Triggers>
  35. </Style>
  36. <ControlTemplate x:Key="tmpThumb" TargetType="{x:Type Thumb}">
  37. <Ellipse Name="e" Width="13" MinHeight="20" Fill="Blue"/>
  38. <ControlTemplate.Triggers>
  39. <Trigger Property="IsMouseOver" Value="True">
  40. <Setter TargetName="e" Property="Fill" Value="Red"/>
  41. </Trigger>
  42. </ControlTemplate.Triggers>
  43. </ControlTemplate>
  44. <ControlTemplate x:Key="tmp" TargetType="{x:Type Slider}">
  45. <Grid>
  46. <Grid.RowDefinitions>
  47. <RowDefinition Height="auto"/>
  48. <RowDefinition Height="auto" MinHeight="25"/>
  49. <RowDefinition Height="auto"/>
  50. </Grid.RowDefinitions>
  51. <TickBar x:Name="top" Fill="Magenta" Grid.Row="0" HorizontalAlignment="Stretch"
  52. Placement="Top" Height="8"
  53. Visibility="Collapsed"/>
  54. <Track x:Name="PART_Track" Grid.Row="1" HorizontalAlignment="Stretch">
  55. <Track.IncreaseRepeatButton>
  56. <RepeatButton Style="{StaticResource StyleForRepeatButton}"
  57. Command="Slider.IncreaseLarge"/>
  58. </Track.IncreaseRepeatButton>
  59. <Track.DecreaseRepeatButton>
  60. <RepeatButton Style="{StaticResource StyleForRepeatButton}"
  61. Command="Slider.DecreaseLarge"/>
  62. </Track.DecreaseRepeatButton>
  63. <Track.Thumb>
  64. <Thumb Height="20" Template="{StaticResource tmpThumb}"/>
  65. </Track.Thumb>
  66. </Track>
  67. <TickBar x:Name="Bottom" Grid.Row="2" Fill="Magenta" HorizontalAlignment="Stretch"
  68. Visibility="Collapsed" Placement="Bottom" Height="8"/>
  69. </Grid>
  70. <ControlTemplate.Triggers>
  71. <Trigger Property="TickPlacement" Value="TopLeft">
  72. <Setter TargetName="top" Property="Visibility" Value="Visible"/>
  73. </Trigger>
  74. <Trigger Property="TickPlacement" Value="BottomRight">
  75. <Setter Property="Visibility" TargetName="Bottom" Value="Visible"/>
  76. </Trigger>
  77. <Trigger Property="TickPlacement" Value="Both">
  78. <Setter TargetName="top" Property="Visibility" Value="Visible"/>
  79. <Setter TargetName="Bottom" Property="Visibility" Value="Visible"/>
  80. </Trigger>
  81. </ControlTemplate.Triggers>
  82. </ControlTemplate>
  83. </Window.Resources>
  84. <Grid>
  85. <Grid.RowDefinitions>
  86. <RowDefinition Height="50"/>
  87. <RowDefinition Height="auto"/>
  88. </Grid.RowDefinitions>
  89. <Slider x:Name="SliderTest" Grid.Row="0"  Margin="10,5,10,5" Maximum="100" Minimum="0" TickFrequency="1"
  90. Template="{StaticResource tmp}"
  91. Value="20" TickPlacement="BottomRight"/>
  92. <TextBlock Grid.Row="1" Text="{Binding Path=Value,ElementName=SliderTest}"
  93. FontFamily="宋体" FontSize="24" FontWeight="Bold"
  94. Margin="150,0,150,0" HorizontalAlignment="Center"/>
  95. </Grid>
  96. </Window>

继续聊WPF的更多相关文章

  1. 继续聊WPF——获取ComboBox中绑定的值

    千万不要认为WPF中的数据绑定会很复杂,尽管它的确比Winform程序灵活多了,但其本质是不变的,特别是ComboBox控件,我们知道在Winform中对该控件的有两个专为数据绑定而设定的属性——Di ...

  2. 继续聊WPF——如何获取ListView中选中的项

    在WPF中获Listview中选中的项,与WinForm里面有着很大的区别,要亲身去研究一下在WPF中如果处理,其实也不难,来,下面我们一起来通过一个简单的示例来感悟一下吧. 第一步就是建立一个WPF ...

  3. 继续聊WPF——动态数据模板

    我为啥称之为“动态数据模板”?先看看下面的截图,今天,我们就是要实现这种功能. 大概是这样的,我们定义的DataTemplate是通过触发器动态应用到 ComboBoxItem 上. 这个下拉列表控件 ...

  4. 继续聊WPF——设置网格控件列标题的样式

    我很奇怪的是,微软那厮是怎么搞的,Blend里面居然不能编辑GridView的样式,十万般无奈之下,只好手写XAML来处理了. 要想知道一个控件的样式是如何设置,看控件类的定义很重要,我们来看看Gri ...

  5. 继续聊WPF——Thumb控件

    这个控件,真不好介绍,MSDN上也是草草几句,反正就是可以让用户拖动的玩意儿,但是,你会发现,当你在该控件上拖动时,它没有反响,也就是说这个东西默认不做任何操作的,它是赖在那里什么都不干,除非你去踢上 ...

  6. 继续聊WPF——自定义CheckBox控件外观

    上一篇文章中谈到了BulletDecorator控件,就是为自定义CheckBox控件的模板做准备,因为CheckBox需要比较严格的布局,正好,BulletDecorator控件就合适了,该控件的布 ...

  7. 继续聊WPF——进度条

    ProgressBar控件与传统WinForm使用方法完全一样,我们只需关注: Minimum——最小值,默认为0: Maximum——最大值,默认为100. Value——当前值.   关键是它的控 ...

  8. 继续聊WPF——Expander控件(1)

    这个控件最实用的地方,就是做导航栏. <StackPanel Margin="20,20" Width="100" Height="460&qu ...

  9. 继续聊WPF——为ListView的行设置样式

    <Window x:Class="Wpf_GridHeaderStyle_sample.Window1" xmlns="http://schemas.microso ...

随机推荐

  1. ant+jmeter中build.xml配置详解

  2. BZOJ 2440 中山市选2011 全然平方数 二分答案+容斥原理+莫比乌斯反演

    题目大意:求第k个无平方因子数是多少(无视原题干.1也是全然平方数那岂不是一个数也送不出去了? 无平方因子数(square-free number),即质因数分解之后全部质因数的次数都为1的数 首先二 ...

  3. luogu2149 [SDOI2009] Dlaxia的路线

    题目大意 在一个无向图中,定义两个点s,t的最短路径子图为一个极大边集,对于该边集内的所有有向边e,总存在一条起点为s,终点为t且经过边e的路径,使得该路径长度为s到t的最短路径长度.现给出一个无向图 ...

  4. uboot向内核模块传递参数的方法

    1 模块参数 定义模块参数 1 module_param(name, type, perm); 定义一个模块参数, name 变量名 type 数据类型 bool:布尔型 invbool:一个布尔型( ...

  5. C# 正则表达式 和 JAVA表达式是想通的

    正则表达式语法 也许有人会说,现在需要正则表达式去验证什么的话,直接在网上找不久一大片吗?还需要学什么啊! 是的,现在在网上找确实是一找一大片,但是,有时候我们也遇到这样的情况,就是我们在网上找的复制 ...

  6. 88. [ExtJS2.1教程-5]ToolBar(工具栏)

    转自:https://llying.iteye.com/blog/324681 面板中可以有工具栏,工具栏可以位于面板顶部或底部,Ext中工具栏是由Ext.Toolbar类来表示.工具栏上可以放按钮. ...

  7. 浅谈自学Python之路(购物车程序练习)

    购物车程序练习 今天我们来做一个购物车的程序联系,首先要理清思路 购物车程序需要用到什么知识点 需要用到哪些循环 程序编写过程中考虑值的类型,是int型还是字符串 如果值为字符串该怎么转成int型 用 ...

  8. 通过JS制作一个简易数码时钟

    设计思路: 数码时钟即通过图片数字来显示当前时间,需要显示的图片的URL根据时间变化而变化. a.获取当前时间Date()并将当前时间信息转换为一个6位的字符串; b.根据时间字符串每个位置对应的数字 ...

  9. SpringCloud 之 Fegin —— 发送GET、POST请求以及文件上传

    由于项目需要调用其他微服务的数据,首先想到的就是写一个http网络请求的工具类,但是想到在之前看springCloud的时候里面有这个Fegin可以实现,就顺便实践一下,虽然过程有点坎坷,好在都顺利解 ...

  10. [Luogu 2216] [HAOI2007]理想的正方形

    [Luogu 2216] [HAOI2007]理想的正方形 题目描述 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入输出格式 输 ...