O truque do snap é útil, mas tem limitações, por exemplo, se você quiser mostrar apenas um subconjunto de ticks válidos. Tive sucesso com duas alternativas: vincular a um inteiro ou arredondar o novo valor. Aqui está um exemplo combinado:
public int MyProperty { get; set; }
private void slider1_ValueChanged(object sender,
RoutedPropertyChangedEventArgs<double> e)
{
(sender as Slider).Value = Math.Round(e.NewValue, 0);
}
<Slider
Name="slider1"
TickPlacement="TopLeft"
AutoToolTipPlacement="BottomRight"
ValueChanged="slider1_ValueChanged"
Value="{Binding MyProperty}"
Minimum="0" Maximum="100" SmallChange="1" LargeChange="10"
Ticks="0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100"/>
Não tenho ideia de como o desempenho de qualquer um se compara ao truque de encaixe, mas não tive nenhum problema *.
* Se você também vincular o valor do controle deslizante a um tipo de campo de texto, verá que, de vez em quando, se estiver usando o mouse, o campo de texto mostrará decimais. Se você também vincular a um int ao mesmo tempo, a string vazia fará com que uma exceção de conversão seja lançada, paralisando brevemente a IU. Esses problemas não foram graves o suficiente para que eu procurasse soluções.