是否有WPF控件来选择看起来像滑块的范围?
是否有一个WPF控件看起来像一个滑块(或者滑块本身),它有一个最小值和一个最大值,而不是一个值,以便用户选择一个范围?滑块栏有一个属性IsSelectionRangeEnabled。检查样本: 您可以从中使用 例如:是否有WPF控件来选择看起来像滑块的范围?,wpf,slider,Wpf,Slider,是否有一个WPF控件看起来像一个滑块(或者滑块本身),它有一个最小值和一个最大值,而不是一个值,以便用户选择一个范围?滑块栏有一个属性IsSelectionRangeEnabled。检查样本: 您可以从中使用 例如: <avalon:RangeSlider RangeStart="0" RangeStop="100" RangeSelectionChanged="RangeSlider_RangeSelectionChanged"/> Ran
<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基础样式:
- 并用于控制:
在上述示例中:
控制数据所在的程序集:库
命名空间: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>