Object->DispatcherObject->DependencyObject->Visual->UIElement->FrameworkElement->Control->RangeBase->Slider
Slider
表示一个控件,该控件可让用户通过沿 Thumb 移动 Track 控件从一个值范围中进行选择。
Slider控件允许用户从一系列值中选择值。 下图显示了控件的一个示例 Slider 。
滑块控件的示例
可以 Slider 通过设置控件的属性来自定义控件。 下面的列表描述了可自定义的的一些属性 Slider :
有关如何自定义控件的详细信息 Slider ,请参阅单个成员。
Slider 重写属性的元数据 Maximum ,并将其默认值设置为10。 有关详细信息,请参阅依赖项属性概述。
备注
如果的值 Slider 已进行动画处理,则在动画完成后,用户可能无法再与 Slider 控件交互。 请参阅 如何:使用情节提要对属性进行动画处理后设置该属性 ,以获取有关如何在动画上还原的用户控件的选项 Slider 。
若要对多个控件应用相同的属性设置 Slider ,请使用 Style 属性。 您可以修改默认值 ControlTemplate ,为控件指定独特的外观。 有关创建的详细信息 ControlTemplate ,请参阅 通过创建 System.windows.controls.controltemplate> 自定义现有控件的外观。 若要查看特定于的部分和状态 Slider ,请参阅 滑块样式和模板。
此控件的依赖属性可能由控件的默认样式设置。 如果按默认样式设置属性,则当控件出现在应用程序中时,属性可能会更改为默认值。 默认样式取决于应用程序运行时使用的桌面主题。 有关详细信息,请参阅 默认的 WPF 主题。
备注
只有视觉对象属性已存在于控件的默认模板中并且已使用 TemplateBinding 设置时,设置该属性才有效。 在通过创建 ControlTemplate 自定义现有控件的外观一文的更改控件的视觉结构部分可以找到视觉属性列表。
自定义滑块控件
要将相同的属性设置应用于多个Slider控件,请使用Style属性。您可以修改默认的ControlTemplate以使控件具有唯一的外观。有关创建ControlTemplate的更多信息,请参见通过创建ControlTemplate自定义现有控件的外观。要查看特定于Slider的零件和状态,请参见Slider样式和模板。
此控件的依赖项属性可以由控件的默认样式设置。如果使用默认样式设置属性,则当控件出现在应用程序中时,该属性可能会从其默认值更改。默认样式由运行应用程序时使用的桌面主题确定。有关更多信息,请参见默认WPF主题。
设置视觉属性仅在该属性同时存在于控件的默认模板中并且通过使用TemplateBinding进行设置时才有效。您可以在通过创建ControlTemplate定制现有控件的外观的“更改控件的视觉结构”部分中找到视觉属性列表。
名称 | 备注 | 权限 |
---|---|---|
AutoToolTipPlacementProperty | 标识 AutoToolTipPlacement 依赖项属性。 | public static readonly |
AutoToolTipPrecisionProperty | 标识 AutoToolTipPrecision 依赖项属性。 | public static readonly |
DelayProperty | 标识 Delay 依赖项属性。 | public static readonly |
IntervalProperty | 标识 Interval 依赖项属性。 | public static readonly |
IsDirectionReversedProperty | 标识 IsDirectionReversed 依赖项属性。 | public static readonly |
IsMoveToPointEnabledProperty | 标识 IsMoveToPointEnabled 依赖项属性。 | public static readonly |
IsSelectionRangeEnabledProperty | 标识 IsSelectionRangeEnabled 依赖项属性。 | public static readonly |
IsSnapToTickEnabledProperty | 标识 IsSnapToTickEnabled 依赖项属性。 | public static readonly |
OrientationProperty | 标识 Orientation 依赖项属性。 | public static readonly |
SelectionEndProperty | 标识 SelectionEnd 依赖项属性。 | public static readonly |
SelectionStartProperty | 标识 SelectionStart 依赖项属性。 | public static readonly |
TickFrequencyProperty | 标识 TickFrequency 依赖项属性。 | public static readonly |
TickPlacementProperty | 标识 TickPlacement 依赖项属性。 | public static readonly |
TicksProperty | 标识 Ticks 依赖项属性。 | public static readonly |
名称 | 备注 | 权限 |
---|---|---|
AutoToolTipPlacement | 获取或设置在按下 Thumb 时是否显示包含 Slider 的当前值的工具提示。 如果显示工具提示,此属性还指定工具提示的位置。 | get; set; |
AutoToolTipPrecision | 获取或设置在工具提示中的 Slider 的 Value 的小数点右侧显示的小数位数。 | get; set; |
DecreaseLarge | 获取一个命令,该命令将 Slider 的值减少与 LargeChange 属性相同的量。 | get; |
DecreaseSmall | 获取一个命令,该命令将 Slider 的值减少与 SmallChange 属性相同的量。 | get; |
Delay | 获取或设置在按下 RepeatButton 之后等待执行用于移动 Thumb 的命令(如 DecreaseLarge 命令)的时间(以毫秒为单位)。 | get; set; |
IncreaseLarge | 获取一个命令,该命令将滑块的值增加与 LargeChange 属性相同的量。 | get; |
IncreaseSmall | 获取一个命令,该命令将滑块的值增加与 SmallChange 属性相同的量。 | get; |
Interval | 获取或设置当用户单击 RepeatButton 的 Slider 时增加或减少命令之间的时间量(以毫秒为单位)。 | get; set; |
IsDirectionReversed | 获取或设置增加值的方向。 | get; set; |
IsMoveToPointEnabled | 获取或设置一个值,该值指示是否立即将 Slider 的 Thumb 移动到在鼠标指针悬停在 Slider 轨道的上方时鼠标单击的位置。 | get; set; |
IsSelectionRangeEnabled | 获取或设置一个值,该值指示 Slider 是否沿 Slider 显示选择范围。 | get; set; |
IsSnapToTickEnabled | 获取或设置一个值,该值指示 Slider 是否自动将 Thumb 移动到最近的刻度线。 | get; set; |
MaximizeValue | 获取一个命令,该命令将 SliderValue 设置为 Maximum 值。 | get; |
MinimizeValue | 获取一个命令,该命令将 SliderValue 设置为 Minimum 值。 | get; |
Orientation | 获取或设置 Slider 的方向。 | get; set; |
SelectionEnd | 获取或设置 Slider 的指定选择内容的最大值。 | get; set; |
SelectionStart | 获取或设置 Slider 的指定选择内容的最大值。 | get; set; |
TickFrequency | 获取或设置刻度线之间的间隔。 | get; set; |
TickPlacement | 获取或设置与 Track 的 Slider 相关的刻度线的位置。 | get; set; |
Ticks | 获取或设置为 Slider 显示的刻度线的位置。 | get; set; |
名称 | 备注 | 权限 |
---|---|---|
ArrangeOverride | 排列 Slider 的内容并确定其 Size。 | protected |
OnApplyTemplate | 生成 Slider 控件的可视化树。 | public |
OnCreateAutomationPeer | 为 Slider 创建一个 AutomationPeer。 | protected |
OnDecreaseLarge | 响应 DecreaseLarge 命令。 | protected |
OnDecreaseSmall | 响应 DecreaseSmall 命令。 | protected |
OnIncreaseLarge | 响应 IncreaseLarge 命令。 | protected |
OnIncreaseSmall | 响应 IncreaseSmall 命令。 | protected |
OnMaximizeValue | 响应 MaximizeValue 命令。 | protected |
OnMaximumChanged | 响应 Maximum 属性值的更改。 | protected |
OnMinimizeValue | 响应 MinimizeValue 命令。 | protected |
OnMinimumChanged | 响应 Minimum 属性值的更改。 | protected |
OnPreviewMouseLeftButtonDown | 提供用于 PreviewMouseLeftButtonDown 路由事件的类处理。 | protected |
OnThumbDragCompleted | 提供用于当用户停止拖动 DragCompleted 的 Thumb 时发生的 Slider 事件的类处理。 | protected |
OnThumbDragDelta | 提供用于当用户拖动 DragDelta 的 Thumb 时发生的 Slider 事件的类处理。 | protected |
OnThumbDragStarted | 提供用于当用户开始拖动 Slider 的 Thumb 时发生的 DragStarted 事件的类处理。 | protected |
OnValueChanged | 当 Value 属性更改时,更新 Slider 的当前位置。 | protected |
IsSnapToTickEnabled
Thumb是否移动到鼠标单击点,还是对齐到Ticks。
IsDirectionReversed
起始点和终点的位置。
IsMoveToPointEnabled
鼠标单击刻度,slider是否移动到点击位置。
Delay、Interval
Delay、Interval是对 RepeatButton响应的属性,如上图。
Ticks
显示的刻度
LargeChange
点击RepeatButton,一次响应会移动一个LargeChange。
SmallChange
一次响应键盘的↑、↓、←、→,会移动一个SmallChange。
XAML范例
<Window
x:Class="SliderDemo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:SliderDemo"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Title="MainWindow"
Width="800"
Height="450"
mc:Ignorable="d">
<StackPanel Background="LightSkyBlue">
<!--Ticks="1,10,20,30,40,50,60,70,80,90,100"-->
<Slider x:Name="slider"
Maximum="100"
Minimum="0"
LargeChange="5"
SmallChange="1"
AutoToolTipPlacement="BottomRight"
AutoToolTipPrecision="4"
Delay="3000"
Interval="1000"
IsDirectionReversed="False"
IsMoveToPointEnabled="True"
IsSnapToTickEnabled="False"
Orientation="Horizontal"
TickFrequency="10"
TickPlacement="Both"
IsSelectionRangeEnabled="True"
SelectionEnd="90"
SelectionStart="10"
ValueChanged="OnValueChanged"/>
<TextBlock/>
</StackPanel>
</Window>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace SliderDemo
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
//不适用绑定,是为了展示事件
private void OnValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
foreach (var item in ((sender as Slider).Parent as StackPanel).Children)
{
if (item is TextBlock) (item as TextBlock).Text = (sender as Slider).Value.ToString();
}
}
}
}
C#范例
<Window
x:Class="SliderDemo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:SliderDemo"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Title="MainWindow"
Width="800"
Height="450"
mc:Ignorable="d">
</Window>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace SliderDemo
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Slider slider = new Slider { Maximum=100,
Minimum=0,
LargeChange=5,
SmallChange=1,
AutoToolTipPlacement=System.Windows.Controls.Primitives.AutoToolTipPlacement.BottomRight,
AutoToolTipPrecision=4,
Delay=3000,
Interval=1000,
IsDirectionReversed=false,
IsMoveToPointEnabled=true,
IsSnapToTickEnabled=false,
Orientation= Orientation.Horizontal,
TickFrequency=10,
TickPlacement= System.Windows.Controls.Primitives.TickPlacement.Both,
IsSelectionRangeEnabled=true,
SelectionEnd=90,
SelectionStart=10
};
slider.ValueChanged += OnValueChanged;
TextBlock textBlock = new TextBlock();
StackPanel stackPanel = new StackPanel();
stackPanel.Background = Brushes.LightSkyBlue;
stackPanel.Children.Add(slider);
stackPanel.Children.Add(textBlock);
this.Content = stackPanel;
}
//不适用绑定,是为了展示事件
private void OnValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
foreach (var item in ((sender as Slider).Parent as StackPanel).Children)
{
if (item is TextBlock) (item as TextBlock).Text = (sender as Slider).Value.ToString();
}
}
}
}