wpf 开发中的slider控件

本文详细介绍了在WPF中使用Slider控件时如何设置阴影效果、确保value值为整数以及调整样式。通过设置TickFrequency、IsSnapToTickEnabled和TickPlacement属性,可以实现滑块值的整数化。同时,展示了如何在style.xml文件中定义Slider的样式,包括水平和垂直方向的模板,并通过Trigger控制不同TickPlacement的显示。

因为项目需要,在学习wpf,在这期间在用slider时遇到了一些问题,现整理如下,

slider控件模糊阴影

<Slider.Effect>               
                <DropShadowEffect BlurRadius="5" Color="White" Opacity="0.7" ShadowDepth="7"/>
 </Slider.Effect>

slider控件value值默认为Double类型,让其为整数方式:

1:设置 TickFrequency属性

2:设置IsSnapToTickEnabled属性:以刻度线对齐

3:设置刻度线出线在滚动条的那边:TickPlacement

4:设置最大值,最小值: Maximum="100" Minimum="0"

例子如下:

<Slider  x:Name="sld_question" VerticalAlignment="Center" Maximum="100" Minimum="0"  Interval="5"  LargeChange="10" TickPlacement="TopLeft"  TickFrequency="2.5">
        <Slider.Effect>               
                <DropShadowEffect BlurRadius="5" Color="White" Opacity="0.7" ShadowDepth="7"/>
        </Slider.Effect>
 </Slider>

在样式文件style.xml中设置采用那种样式:

<!--slider的样式的整体控制-->
    <Style TargetType="{x:Type Slider}">
        <Setter Property="SnapsToDevicePixels" Value="true"/>
        <Setter Property="OverridesDefaultStyle" Value="true"/>
        <Setter Property="IsSnapToTickEnabled" Value="True"/>
        <!--根据Orientation属性的值不同来采用不同的样式-->
        <Style.Triggers>
            <Trigger Property="Orientation" Value="Horizontal">
                <Setter Property="MinWidth" Value="104" />
                <Setter Property="MinHeight" Value="21" />
                <Setter Property="Template" Value="{StaticResource HorizontalSlider}" />
            </Trigger>
            <Trigger Property="Orientation" Value="Vertical">
                <Setter Property="MinWidth" Value="21" />
                <Setter Property="MinHeight" Value="104" />
                <Setter Property="Template" Value="{StaticResource VerticalSlider}" />
            </Trigger>
        </Style.Triggers>
    </Style>

<!--水平slider的样式-->
    <ControlTemplate x:Key="HorizontalSlider" TargetType="{x:Type Slider}">
        <Grid>
            <Grid.RowDefinitions>
                <!-- 调整布局-->
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto" MinHeight="{TemplateBinding Slider.MinHeight}" />
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <!--竖线的宽度-->
            <TickBar
      Name="TopTick"
      SnapsToDevicePixels="True"
      Placement="Top"
      Fill="{StaticResource GlyphBrushSlider}"
      Height="30"
      Visibility="Collapsed" />
            <!--slider中间的滚动条的宽度-->
            <Border
      Name="TrackBackground"
      Margin="0"
      CornerRadius="2"
      Height="10"
      Grid.Row="1"
      Background="{StaticResource LightBrush}"
      BorderBrush="{StaticResource NormalBorderBrushSlider}"
      BorderThickness="1" />
            <Track Grid.Row="1" Name="PART_Track">
                <!-- 按钮左侧的滚动条的样式-->
                <Track.DecreaseRepeatButton>
                    <RepeatButton
         Style="{StaticResource SliderButtonStyle}"
          Command="Slider.DecreaseLarge" />
                </Track.DecreaseRepeatButton>
                <!-- 按钮的样式-->
                <Track.Thumb>
                    <Thumb Style="{StaticResource SliderThumbStyle}" />
                </Track.Thumb>
                <!-- 按钮右侧的滚动条的样式-->
                <Track.IncreaseRepeatButton>
                    <RepeatButton
          Style="{StaticResource SliderButtonStyle}"
          Command="Slider.IncreaseLarge" />
                </Track.IncreaseRepeatButton>
            </Track>
            <!--竖线的宽度-->
            <TickBar
      Name="BottomTick"
      SnapsToDevicePixels="True"
      Grid.Row="2"
      Fill="{TemplateBinding Foreground}"
      Placement="Bottom"
      Height="30"
      Visibility="Collapsed" />
        </Grid>
        <!--事件驱动,根据TickPlacement的不同值,设置不同的坚线显示样式-->
        <ControlTemplate.Triggers>
            <Trigger Property="TickPlacement" Value="TopLeft">
                <Setter TargetName="TopTick" Property="Visibility" Value="Visible"/>
            </Trigger>
            <Trigger Property="TickPlacement" Value="BottomRight">
                <Setter TargetName="BottomTick" Property="Visibility" Value="Visible"/>
            </Trigger>
            <Trigger Property="TickPlacement" Value="Both">
                <Setter TargetName="TopTick" Property="Visibility" Value="Visible"/>
                <Setter TargetName="BottomTick" Property="Visibility" Value="Visible"/>
            </Trigger>
        </ControlTemplate.Triggers>
    </ControlTemplate>
    <!--竖直slider的样式-->
    <ControlTemplate x:Key="VerticalSlider" TargetType="{x:Type Slider}">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="Auto" MinWidth="{TemplateBinding Slider.MinWidth}"/>
                <ColumnDefinition Width="Auto"/>
            </Grid.ColumnDefinitions>
            <TickBar
      Name="TopTick"
      SnapsToDevicePixels="True"
      Placement="Left"
      Fill="{StaticResource GlyphBrushSlider}"
      Width="30"
      Visibility="Collapsed" />
            <Border
      Name="TrackBackground"
      Margin="0"
      CornerRadius="2"
      Width="10"
      Grid.Column="1"
      Background="{StaticResource HorizontalLightBrush}"
      BorderBrush="{StaticResource HorizontalNormalBorderBrush}"
      BorderThickness="1" />
            <Track Grid.Column="1" Name="PART_Track">
                <Track.DecreaseRepeatButton>
                    <RepeatButton
          Style="{StaticResource SliderButtonStyle}"
          Command="Slider.DecreaseLarge" />
                </Track.DecreaseRepeatButton>
                <Track.Thumb>
                    <Thumb Style="{StaticResource SliderThumbStyle}" />
                </Track.Thumb>
                <Track.IncreaseRepeatButton>
                    <RepeatButton
          Style="{StaticResource SliderButtonStyle}"
          Command="Slider.IncreaseLarge" />
                </Track.IncreaseRepeatButton>
            </Track>
            <TickBar
      Name="BottomTick"
      SnapsToDevicePixels="True"
      Grid.Column="2"
      Fill="{TemplateBinding Foreground}"
      Placement="Right"
      Width="30"
      Visibility="Collapsed" />
        </Grid>
        <ControlTemplate.Triggers>
            <Trigger Property="TickPlacement" Value="TopLeft">
                <Setter TargetName="TopTick" Property="Visibility" Value="Visible"/>
            </Trigger>
            <Trigger Property="TickPlacement" Value="BottomRight">
                <Setter TargetName="BottomTick" Property="Visibility" Value="Visible"/>
            </Trigger>
            <Trigger Property="TickPlacement" Value="Both">
                <Setter TargetName="TopTick" Property="Visibility" Value="Visible"/>
                <Setter TargetName="BottomTick" Property="Visibility" Value="Visible"/>
            </Trigger>
        </ControlTemplate.Triggers>
    </ControlTemplate>

<!--用到的其他样式-->


    <Style x:Key="SliderThumbStyle" TargetType="{x:Type Thumb}">
        <Setter Property="SnapsToDevicePixels" Value="true"/>
        <Setter Property="OverridesDefaultStyle" Value="true"/>
        <Setter Property="Height" Value="40"/>
        <Setter Property="Width" Value="40"/>
        <Setter Property="Template">
            <Setter.Value>
                <!--圆型按钮的样式-->
                <ControlTemplate TargetType="{x:Type Thumb}">
                    <Ellipse
          Name="Ellipse"
          Fill="{StaticResource NormalBrush}"
          Stroke="{StaticResource NormalBorderBrushSlider}"
          StrokeThickness="1" />
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter TargetName="Ellipse" Property="Fill" Value="{StaticResource DarkBrushSlider}"/>
                        </Trigger>
                        <Trigger Property="IsEnabled" Value="false">
                            <Setter TargetName="Ellipse" Property="Fill" Value="{StaticResource DisabledBackgroundBrush}"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

<!--其他样式-->

    <!--添加slider样式-->
    <Style x:Key="SliderButtonStyle" TargetType="{x:Type RepeatButton}">
        <Setter Property="SnapsToDevicePixels" Value="true"/>
        <Setter Property="OverridesDefaultStyle" Value="true"/>
        <Setter Property="IsTabStop" Value="false"/>
        <Setter Property="Focusable" Value="false"/>
        <Setter Property="Height" Value="40"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type RepeatButton}">
                    <Border Background="Transparent" />
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    <LinearGradientBrush x:Key="DarkBrushSlider" StartPoint="0,0" EndPoint="0,1">
        <GradientBrush.GradientStops>
            <GradientStopCollection>
                <GradientStop Color="#FFF" Offset="0.0"/>
                <GradientStop Color="#AAA" Offset="1.0"/>
            </GradientStopCollection>
        </GradientBrush.GradientStops>
    </LinearGradientBrush>
    <LinearGradientBrush x:Key="NormalBrush" StartPoint="0,0" EndPoint="0,1">
        <GradientBrush.GradientStops>
            <GradientStopCollection>
                <GradientStop Color="#FFF" Offset="0.0"/>
                <GradientStop Color="#CCC" Offset="1.0"/>
            </GradientStopCollection>
        </GradientBrush.GradientStops>
    </LinearGradientBrush>

    <LinearGradientBrush x:Key="LightBrush" StartPoint="0,0" EndPoint="0,1">
        <GradientBrush.GradientStops>
            <GradientStopCollection>
                <GradientStop Color="#FFF" Offset="0.0"/>
                <GradientStop Color="#EEE" Offset="1.0"/>
            </GradientStopCollection>
        </GradientBrush.GradientStops>
    </LinearGradientBrush>
    <LinearGradientBrush x:Key="HorizontalLightBrush" StartPoint="0,0" EndPoint="1,0">
        <GradientBrush.GradientStops>
            <GradientStopCollection>
                <GradientStop Color="#FFF" Offset="0.0"/>
                <GradientStop Color="#EEE" Offset="1.0"/>
            </GradientStopCollection>
        </GradientBrush.GradientStops>
    </LinearGradientBrush>
    <LinearGradientBrush x:Key="HorizontalNormalBrush" StartPoint="0,0" EndPoint="1,0">
        <GradientBrush.GradientStops>
            <GradientStopCollection>
                <GradientStop Color="#FFF" Offset="0.0"/>
                <GradientStop Color="#CCC" Offset="1.0"/>
            </GradientStopCollection>
        </GradientBrush.GradientStops>
    </LinearGradientBrush>
    <!-- Border Brushes -->
    <LinearGradientBrush x:Key="NormalBorderBrushSlider" StartPoint="0,0" EndPoint="0,1">
        <GradientBrush.GradientStops>
            <GradientStopCollection>
                <GradientStop Color="#CCC" Offset="0.0"/>
                <GradientStop Color="#444" Offset="1.0"/>
            </GradientStopCollection>
        </GradientBrush.GradientStops>
    </LinearGradientBrush>


    <LinearGradientBrush x:Key="HorizontalNormalBorderBrush" StartPoint="0,0" EndPoint="1,0">
        <GradientBrush.GradientStops>
            <GradientStopCollection>
                <GradientStop Color="#CCC" Offset="0.0"/>
                <GradientStop Color="#444" Offset="1.0"/>
            </GradientStopCollection>
        </GradientBrush.GradientStops>
    </LinearGradientBrush>

    <LinearGradientBrush x:Key="DefaultedBorderBrush" StartPoint="0,0" EndPoint="0,1">
        <GradientBrush.GradientStops>
            <GradientStopCollection>
                <GradientStop Color="#777" Offset="0.0"/>
                <GradientStop Color="#000" Offset="1.0"/>
            </GradientStopCollection>
        </GradientBrush.GradientStops>
    </LinearGradientBrush>

    <LinearGradientBrush x:Key="PressedBorderBrush" StartPoint="0,0" EndPoint="0,1">
        <GradientBrush.GradientStops>
            <GradientStopCollection>
                <GradientStop Color="#444" Offset="0.0"/>
                <GradientStop Color="#888" Offset="1.0"/>
            </GradientStopCollection>
        </GradientBrush.GradientStops>
    </LinearGradientBrush>

    <SolidColorBrush x:Key="LightBorderBrush" Color="#AAA" />

    <!-- Miscellaneous Brushes -->
    <SolidColorBrush x:Key="GlyphBrushSlider" Color="#444" />

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值