是否有WPF控件来选择看起来像滑块的范围?

时间:2013-04-04 14:51:09

标签: wpf slider

是否有一个WPF控件看起来像滑块(或者可能是Slider本身),它既有最小值又有最大值而不是单个值让用户选择范围?

7 个答案:

答案 0 :(得分:10)

MahApps.Metro库提供了一个很棒的RangeSlider控件。以下是演示应用程序中的示例:

Examples of range sliders from the demo application

答案 1 :(得分:4)

滑块栏有一个属性IsSelectionRangeEnabled。检查样本: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/a9eb8697-3ae4-4045-9508-a75d6168a8af/

答案 2 :(得分:3)

更新:Avalon控件是WPF扩展工具包的旧版本,现在包含AvalonDock。

RangeSlider是WPF Extended工具包的一部分。

答案 3 :(得分:2)

我尝试将两个滑块放在另一个滑块上,因此它看起来像一个范围滑块 然后,您可以设置值,一个滑块为min,另一个滑块为max,并为更大和更小的值添加逻辑。希望它有效,在这种情况下,您不需要添加任何外部第三方库

答案 4 :(得分:2)

正如 @kmatyaszek 已经说AvalonControlsLibrary非常免费( Microsoft公共许可证(Ms-PL))控件库。

但是我发现 RangeSlider 的基本样式不太满意。

样式更适合现代版(RangeSlider.xaml):

<UserControl x:Class="MyProject.MyUserControl"
         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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
         xmlns:wpf="clr-namespace:Library.WPF;assembly=Library"
         MinWidth="700"
         HorizontalAlignment="Left"
         DataContext="{Binding RelativeSource={RelativeSource Self}}"
         mc:Ignorable="d">
<UserControl.Resources>
    <ResourceDictionary Source="/Library;component/WPF/RangeSlider/RangeSlider.xaml" />
</UserControl.Resources>

<StackPanel>
                <wpf:RangeSlider Width="400"
                                 MinRange="0"
                                 RangeStart="10"
                                 RangeStartSelected="{Binding MyValue_Min}"
                                 RangeStop="100"
                                 RangeStopSelected="{Binding MyValue_Max}" />
 </StackPanel>

以下是的外观示例(您可以通过更改画笔颜色值来更改颜色)

enter image description here

.NET 4.5中的控件使用示例

{{1}}

在上面的示例中:

控制数据所在的装配:

命名空间: Library.WPF

  • /WPF/RangeSlider/RangeSlider.xaml &lt; - xaml style
  • /WPF/RangeSlider/RangeSlider.cs &lt; - 控制代码

答案 5 :(得分:1)

您可以使用RangeSlider中的AvalonControlsLibrary

示例:

<avalon:RangeSlider RangeStart="0" RangeStop="100"
                    RangeSelectionChanged="RangeSlider_RangeSelectionChanged"/>

avalon是:

xmlns:avalon="http://schemas.AvalonControls/AvalonControlsLibrary/Controls"

RangeSelectionChanged事件hadler:

private void RangeSlider_RangeSelectionChanged(object sender, AC.AvalonControlsLibrary.Controls.RangeSelectionChangedEventArgs e)
{
    Console.WriteLine("e.NewRangeStart: " + e.NewRangeStart);
    Console.WriteLine("e.NewRangeStop: " + e.NewRangeStop); 
}

答案 6 :(得分:1)