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