如何在WPF中设置滑块控件的样式?

如何在WPF中设置滑块控件的样式?,wpf,xaml,slider,styling,Wpf,Xaml,Slider,Styling,我想设置滑块控件的样式,以便将可拖动拇指的高度设置为8像素 最简单的方法是什么 您必须创建一个控件模板来重新设置所需控件部分的样式 请看一看这篇文章,它应该会对您有所帮助。您可能还想看一看,并且滑块控件有许多部分,包括拇指、重复按钮和轨迹。它是具有命名元素(如PART_Track)的控件之一,由代码引用以使其正常工作。一个好的起点是使用Blend来帮助您 启动新项目(或创建新窗口)。在XAML窗口中添加以下内容: <ScrollBar/> 然后,您可以明显地根据自己的心意更改生成的

我想设置滑块控件的样式,以便将可拖动拇指的高度设置为8像素

最简单的方法是什么


您必须创建一个控件模板来重新设置所需控件部分的样式


请看一看这篇文章,它应该会对您有所帮助。

您可能还想看一看,并且

滑块控件有许多部分,包括拇指、重复按钮和轨迹。它是具有命名元素(如PART_Track)的控件之一,由代码引用以使其正常工作。一个好的起点是使用Blend来帮助您

启动新项目(或创建新窗口)。在XAML窗口中添加以下内容:

<ScrollBar/>
然后,您可以明显地根据自己的心意更改生成的样式

您需要以编程方式查找控件中嵌入的滚动条,或者通过更改样式定义将样式应用于范围中的所有滚动条,以便:-

  <Style x:Key="ScrollBarStyle1" TargetType="{x:Type ScrollBar}">
    ...
  </Style>

...
变成

  <Style TargetType="{x:Type ScrollBar}">
    ...
  </Style>

...

因此,它将应用于样式定义的区域中的所有滚动条。

此处提供了一篇很好的MSDN文章,给出了所有WPF控件的控件模板:


请记住,这些控件模板在视觉上生成相同的控件(即:这些是WPF使用的控件模板)。但这是定制控件视觉树的一个很好的起点。

这只是一个概念证明,您也可以为复合控件的单个部分设置样式,如滑块: 但是要注意,颜色的选择是随机的,所以这会很难看。 不幸的是,如果忽略滑块的自定义样式,则拇指样式不会产生效果

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Grid>
    <Grid.Resources>
      <ResourceDictionary>
        <Style TargetType="{x:Type Slider}">
          <Setter Property="Background" Value="Green"/>
          <Setter Property="BorderBrush" Value="Navy"/>
          <Setter Property="Template">
            <Setter.Value>
              <ControlTemplate TargetType="{x:Type Slider}">
                <Grid x:Name="GridRoot">
                  <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                  </Grid.RowDefinitions>
  <!-- TickBar shows the ticks for Slider -->
                  <TickBar x:Name="TopTick" Height="4" Fill="Blue" Placement="Top" SnapsToDevicePixels="True" Visibility="Collapsed"/>
                  <Border x:Name="Border" Height="4" Grid.Row="1" Margin="0" Background="Blue" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="2"/>
  <!-- The Track lays out the repeat buttons and thumb -->
                  <Track x:Name="PART_Track" Grid.Row="1">
                    <Track.Thumb>
                      <Thumb MinWidth="15" MinHeight="30"/>
                    </Track.Thumb>
                    <Track.IncreaseRepeatButton>
                      <RepeatButton Command="Slider.IncreaseLarge"/>
                    </Track.IncreaseRepeatButton>
                    <Track.DecreaseRepeatButton>
                      <RepeatButton Command="Slider.DecreaseLarge"/>
                    </Track.DecreaseRepeatButton>
                  </Track>
                  <TickBar x:Name="BottomTick" Height="4" Grid.Row="2" Fill="{TemplateBinding Foreground}" Placement="Bottom" SnapsToDevicePixels="True" Visibility="Collapsed"/>
                </Grid>
              </ControlTemplate>
            </Setter.Value>
          </Setter>
        </Style>
      </ResourceDictionary>
    </Grid.Resources>
    <Slider Maximum="100" Minimum="0">
      <Slider.Resources>
        <Style TargetType="{x:Type Thumb}">
          <Setter Property="Background" Value="Yellow"/>
          <Setter Property="Height" Value="80"/>
        </Style>
      </Slider.Resources>
    </Slider>
  </Grid>
</Page>

这里有一个简单快捷的方法:

<Slider ...>
    <Slider.LayoutTransform>
         <ScaleTransform CenterX="0" CenterY="0" ScaleX="1" ScaleY="0.5"/>
    </Slider.LayoutTransform>
</Slider>


这不完全是8像素,但在获得所需大小之前,您可以稍微使用ScaleY属性。

我想使用blend,但我没有许可证:-((取决于我的老板)@Sander:您也可以使用Kaxaml()有时要计算样式。它包含许多主控件的完整样式的代码片段。也许值得添加,为了获得理想的效果,最相关的是拇指样式。他可以将以下内容添加到他的滑块中:…实际滑块内容..哦,你是对的。似乎与默认滑块样式。我这里有一个工作示例,但它太长,无法粘贴到注释中。@Rikka:添加了工作示例作为答案。感谢您指出这一点。
  <Style TargetType="{x:Type ScrollBar}">
    ...
  </Style>
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Grid>
    <Grid.Resources>
      <ResourceDictionary>
        <Style TargetType="{x:Type Slider}">
          <Setter Property="Background" Value="Green"/>
          <Setter Property="BorderBrush" Value="Navy"/>
          <Setter Property="Template">
            <Setter.Value>
              <ControlTemplate TargetType="{x:Type Slider}">
                <Grid x:Name="GridRoot">
                  <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                  </Grid.RowDefinitions>
  <!-- TickBar shows the ticks for Slider -->
                  <TickBar x:Name="TopTick" Height="4" Fill="Blue" Placement="Top" SnapsToDevicePixels="True" Visibility="Collapsed"/>
                  <Border x:Name="Border" Height="4" Grid.Row="1" Margin="0" Background="Blue" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="2"/>
  <!-- The Track lays out the repeat buttons and thumb -->
                  <Track x:Name="PART_Track" Grid.Row="1">
                    <Track.Thumb>
                      <Thumb MinWidth="15" MinHeight="30"/>
                    </Track.Thumb>
                    <Track.IncreaseRepeatButton>
                      <RepeatButton Command="Slider.IncreaseLarge"/>
                    </Track.IncreaseRepeatButton>
                    <Track.DecreaseRepeatButton>
                      <RepeatButton Command="Slider.DecreaseLarge"/>
                    </Track.DecreaseRepeatButton>
                  </Track>
                  <TickBar x:Name="BottomTick" Height="4" Grid.Row="2" Fill="{TemplateBinding Foreground}" Placement="Bottom" SnapsToDevicePixels="True" Visibility="Collapsed"/>
                </Grid>
              </ControlTemplate>
            </Setter.Value>
          </Setter>
        </Style>
      </ResourceDictionary>
    </Grid.Resources>
    <Slider Maximum="100" Minimum="0">
      <Slider.Resources>
        <Style TargetType="{x:Type Thumb}">
          <Setter Property="Background" Value="Yellow"/>
          <Setter Property="Height" Value="80"/>
        </Style>
      </Slider.Resources>
    </Slider>
  </Grid>
</Page>
<Slider ...>
    <Slider.LayoutTransform>
         <ScaleTransform CenterX="0" CenterY="0" ScaleX="1" ScaleY="0.5"/>
    </Slider.LayoutTransform>
</Slider>