Reputation: 1388
I need to extend a slider thumb to stick out of its control. Is that possible then how? If not how can i achieve this? Please Help.
For e.g My slider's height is 50 but the thumb must start -50px outside the control and have 100 height.
Here yellow is the slider control, red is the thumb now I need the thumb to extend add the orange part to the same thumb.
Thanks
Upvotes: 0
Views: 2050
Reputation: 31
Wrap thumb by Canvas Control and set ClipToBOunds= "False" like this
<Style x:Key="SliderThumbStyle"
TargetType="{x:Type Thumb}">
<Setter Property="SnapsToDevicePixels"
Value="true" />
<Setter Property="OverridesDefaultStyle"
Value="true" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Thumb}">
<Canvas>
<Border Width="16" Height="16" Canvas.Top="-3" ClipToBounds="False" Background="Black" />
</Canvas>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Upvotes: 0
Reputation: 69959
If you can build a UI using WPF controls, then you can define a new ControlTemplate
... it really is no different. Here is how... always start by implementing the default ControlTemplate
so that your object initially looks 'normal'. Then simply locate the part you want to change... and change it:
The trick with this one is that the Thumb
does not stick out of the control, instead the whole control is enlarged. Now the default ControlTemplate
is so large that I'm not going to add all of the XAML here. Start with the default one that @VimalCK kindly added a link to (don't forget to include the Resources
) and then add these changes (hopefully I've remembered all that I changed:
<Style x:Key="SliderThumbStyle" TargetType="{x:Type Thumb}">
<Setter Property="SnapsToDevicePixels" Value="true" />
<Setter Property="OverridesDefaultStyle" Value="true" />
<Setter Property="Height" Value="200" />
<Setter Property="Width" Value="14" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Thumb}">
<Grid>
<Ellipse x:Name="Ellipse" StrokeThickness="1" Height="14"
VerticalAlignment="Bottom">
... <!--Use default XAML here-->
</Ellipse>
<Rectangle Height="200" Width="2" Stroke="Red" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Then inside the HorizontalSlider ControlTemplate
, change the TrackBackground Border
definition to this:
<Border x:Name="TrackBackground" VerticalAlignment="Bottom" Margin="0,0,0,5"
CornerRadius="2" Height="4" Grid.Row="1" BorderThickness="1">
... <!--Use default XAML here-->
</Border>
Then use it with a Height
like this:
<Slider Height="210" Maximum="100" Minimum="0" TickPlacement="BottomRight"
VerticalAlignment="Bottom" />
I think I documented all the changes that I made... if not, you might need to set a Height
, or a VerticalAlignment
to Bottom
on something... either way, just experiment until you get what you want. Exploring how the default ControlTemplate
s have been defined is a great way to learn WPF.
Upvotes: 1
Reputation: 3563
The WPF controls provided by Microsoft has a default style and template which is available in MSDN and you can modify this based on your requirements. For Slider control Style and Template please visit below link
http://msdn.microsoft.com/en-us/library/ms753256(v=vs.110).aspx
Upvotes: 0