下面看一个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. 工作easy,赚钱非常难

    李宗盛有首歌的歌词里写到:「工作是easy的,赚钱是困难的」. 乍一听感觉有点矛盾,工作的一个重要结果不就是赚钱么,为什么工作easy赚钱却难?但细致一想就恍然当中想表达的意思了. 工作的本质是出售劳 ...

  2. 关于Windows下程序运行的说明

    预计有非常多人首次都是通过Windows(微软的操作系统)来使用计算机的.Windows的设计导致非常多人觉得全部程序仅仅要双击一下就能够被正确运行了,所以一大堆初学程序设计的童鞋就会遇到些疑问: 为 ...

  3. 【Linux】Ubuntu 开机默认亮度改动方法

    换了ubuntu 之后.发现开机屏幕都是"最大亮度",每次都要到设置中手动调节,非常麻烦.于是想到去改动这个设置.Google一通,别人可行的办法到我这就没用了.郁闷.最后是在st ...

  4. 【BASH】bash shell的使用实例

    ************************************************************************ ****原文:blog.csdn.net/clark_ ...

  5. luogu3119 草鉴定

    题目大意 给出一个有向图,问将图中的哪一个边翻转,会使节点1所在的强连通分量内的节点数最多.输出这个节点数. 题解 让我们看看暴力怎么做,即枚举每一条边,将其翻转,然后求节点1所在强连通分量节点数,然 ...

  6. CF 86D 莫队(卡常数)

    CF 86D 莫队(卡常数) D. Powerful array time limit per test 5 seconds memory limit per test 256 megabytes i ...

  7. JavaI/O 系统

    1.JavaI/O 系统概述 A.  输入输出(I/O):指的是计算机与外部世界,或者一个程序与计算机的其余部分之间的接口 B. 流的概念(流:Stream) 流的基本特性:有数据.有方向 2. 流的 ...

  8. python使用MySQLdb向mySQL批量插入数据的方法

    该功能通过调用mySQLdb python库中的 cursor.executemany()函数完成批量处理. 今天用这个函数完成了批量插入 例程: def test_insertDB(options) ...

  9. LeetCode.5-最长回文子串(Longest Palindromic Substring)

    这是悦乐书的第342次更新,第366篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Medium级别的第3题(顺位题号是5).给定一个字符串s,找到s中最长的回文子字符串. 您可以假设s ...

  10. Dotnet Core2.1 使用CodeFirst

    一.添加Mysql引用 二.添加连接字符串 三.配置startup.cs 三.初始化数据库 Add-Migration init Update-Database 四.数据迁移 user实体添加了pas ...