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

是否有WPF控件来选择看起来像滑块的范围?,wpf,slider,Wpf,Slider,是否有一个WPF控件看起来像一个滑块(或者滑块本身),它有一个最小值和一个最大值,而不是一个值,以便用户选择一个范围?滑块栏有一个属性IsSelectionRangeEnabled。检查样本: 您可以从中使用 例如: <avalon:RangeSlider RangeStart="0" RangeStop="100" RangeSelectionChanged="RangeSlider_RangeSelectionChanged"/> Ran

是否有一个WPF控件看起来像一个滑块(或者滑块本身),它有一个最小值和一个最大值,而不是一个值,以便用户选择一个范围?

滑块栏有一个属性IsSelectionRangeEnabled。检查样本: 您可以从中使用

例如:

<avalon:RangeSlider RangeStart="0" RangeStop="100"
                    RangeSelectionChanged="RangeSlider_RangeSelectionChanged"/>
RangeSelectionChanged事件处理器:

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

我试着把两个滑块一个放在另一个上面,所以它看起来像一个范围滑块
然后,您可以设置该值,一个滑块用于最小值,另一个滑块用于最大值,并为较大值和较小值添加逻辑。希望它能工作,在这种情况下,您不需要添加任何外部第三方库更新:Avalon控件是WPF扩展工具包的较早前身,现在包括AvalonDock

RangeSloider是WPF扩展工具包的一部分。

该库提供了一个很棒的RangeSloider控件。下面是演示应用程序中的一个示例:

正如@kmatyaszek已经说过的,它是一个非常免费的(微软公共许可证(Ms PL))控件库

然而,我发现自己对RangeSlaider的基本样式不是很满意

以下是it更现代版本的样式(RangeSloider.xaml):


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

  • 从以下位置替换为it基础样式:

  • 并用于控制:

NET 4.5中控件使用的示例

在上述示例中: 控制数据所在的程序集:

命名空间:Library.WPF


  • /WPF/RangeSlider/RangeSlider.xaml我推荐Xceed的RangeSloider


    一幅画抵得上千言万语+1这只允许您在选择此添加的幻灯片时突出显示感谢…我喜欢xceed,因此它适合该项目,但几年前我放弃了它,但很高兴将来知道。
    private void RangeSlider_RangeSelectionChanged(object sender, AC.AvalonControlsLibrary.Controls.RangeSelectionChangedEventArgs e)
    {
        Console.WriteLine("e.NewRangeStart: " + e.NewRangeStart);
        Console.WriteLine("e.NewRangeStop: " + e.NewRangeStop); 
    }
    
            <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
                xmlns:drawing="clr-namespace:System.Drawing;assembly=System.Drawing" >
    
        <SolidColorBrush x:Key="BrushSliderEdge" Color="LightGray" />
        <SolidColorBrush x:Key="BrushSliderActiveArea" Color="DeepSkyBlue" />
        <SolidColorBrush x:Key="BrushSliderThumb" Color="LightSkyBlue" />
        <SolidColorBrush x:Key="BrushSliderThumbBorder" Color="DeepSkyBlue" />
    
        <Style x:Key="SliderEdge" TargetType="RepeatButton">
        <Setter Property="Focusable" Value="false" />
        <Setter Property="IsTabStop" Value="false" />
        <Setter Property="OverridesDefaultStyle" Value="true" />
        <Setter Property="SnapsToDevicePixels" Value="true" />
        <Setter Property="Template">
            <Setter.Value>
            <ControlTemplate TargetType="RepeatButton">
                <Border Height="3" Background="{StaticResource BrushSliderEdge}" BorderBrush="{StaticResource BrushSliderEdge}" BorderThickness="1" />
            </ControlTemplate>
            </Setter.Value>
        </Setter>
        </Style>
        <Style x:Key="SliderInner" TargetType="Thumb">
        <Setter Property="OverridesDefaultStyle" Value="true" />
        <Setter Property="SnapsToDevicePixels" Value="true" />
        <Setter Property="Template">
            <Setter.Value>
            <ControlTemplate TargetType="Thumb">
                <Border Height="3" Background="{StaticResource BrushSliderActiveArea}" BorderBrush="{StaticResource BrushSliderThumbBorder}" BorderThickness="1" />
            </ControlTemplate>
            </Setter.Value>
        </Setter>
        </Style>
    
    
        <Style x:Key="SliderThumb" TargetType="Thumb">
        <Setter Property="OverridesDefaultStyle" Value="true" />
        <Setter Property="SnapsToDevicePixels" Value="true" />
        <Setter Property="Template">
            <Setter.Value>
            <ControlTemplate TargetType="Thumb">
                <Ellipse Width="10" Height="10" Fill="{StaticResource BrushSliderThumb}" />
            </ControlTemplate>
            </Setter.Value>
        </Setter>
        </Style>
    
        <Style TargetType="{x:Type local:RangeSlider}">
        <Setter Property="Template">
            <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:RangeSlider}">
                <StackPanel Name="PART_RangeSliderContainer" Orientation="Horizontal">
                <RepeatButton Name="PART_LeftEdge" Style="{StaticResource SliderEdge}" />
                <Thumb Name="PART_LeftThumb" Cursor="SizeWE" Style="{StaticResource SliderThumb}" />
                <Thumb Name="PART_MiddleThumb" MinWidth="10" Cursor="ScrollAll" Style="{StaticResource SliderInner}" />
                <Thumb Name="PART_RightThumb" Cursor="SizeWE" Style="{StaticResource SliderThumb}" />
                <RepeatButton Name="PART_RightEdge" Style="{StaticResource SliderEdge}" />
                </StackPanel>
            </ControlTemplate>
            </Setter.Value>
        </Setter>
        </Style>
    </ResourceDictionary>
    
    <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>