In Windows Phone 8, we can add a slider control onto a XAML page using the Slider
element.
<Slider Name="MySlider"
HorizontalAlignment="Stretch"
Maximum="12" Minimum="-12" />
As can be seen, the slider does not step to discrete values (e.g. 0.0, 0.5, 1.0 etc.), but instead allows any value within the Maximum and Minimum range to be set.
For some applications, this would not be expected behaviour, for example using a Slider control to represent hours in a day where only whole hours are allowed.
Fortunately, a simple Slider
can easily be given stepping functionality by overriding its ValueChanged
event handler.
To do this, first we must add a ValueChanged
handler into the XAML definition of the slider.
<Slider Name="MySlider"
HorizontalAlignment="Stretch"
Maximum="12"
Minimum="-12"
ValueChanged="MySlider_ValueChanged" />
Secondly, we must add a ValueChanged
handler into the XAML page’s backing code and set the Value
of the slider control to be the correct stepped value.
For example, to make the slider control have discrete steps of 0.5:
private void MySlider_ValueChanged(object sender,
RoutedPropertyChangedEventArgs<double> e)
{
MySlider.Value = (Math.Round(e.NewValue/0.5)/2.0);
}