valor tablero tabla posicional para numeros niños naturales los hasta enseñar ejemplos decimales como billones wpf controls slider

tablero - ¿Cómo hacer que un control deslizante de WPF encaje solo en posiciones enteras discretas?



valor posicional de los numeros naturales y decimales (4)

Con demasiada frecuencia quiero un control deslizante de WPF que se comporte como el System.Windows.Forms.TrackBar de la antigüedad. Es decir, quiero un control deslizante que vaya de X a Y, pero solo permite al usuario moverlo en posiciones enteras discretas.

¿Cómo se hace esto en WPF ya que la propiedad Value en el control deslizante es el doble?


El truco instantáneo es útil, pero tiene limitaciones, por ejemplo, si solo desea mostrar un subconjunto de marcas válidas. He tenido éxito con dos alternativas: enlazar a un número entero o redondear el nuevo valor. Aquí hay un ejemplo 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"/>

No tengo idea de cómo se compara el rendimiento de ninguno con el truco instantáneo, pero no he tenido ningún problema *.

* Si también vincula el valor del control deslizante a un tipo de campo de texto, experimentará eso, de vez en cuando si usa el mouse, el campo de texto mostrará decimales. Si también se enlaza a un int al mismo tiempo, la cadena vacía causará una excepción de conversión que se empantana brevemente en la interfaz de usuario. Estos problemas no han sido lo suficientemente graves como para buscar soluciones.


La respuesta simple es que aproveche las propiedades IsSnapToTickEnabled y TickFrequency . Es decir, active la opción ajustar y establezca la frecuencia de marca en 1.

O, en otras palabras ... aprovecha las marcas ... pero no necesariamente tienes que mostrar los tics a los que te estás ajustando.

Mira la siguiente pieza de xaml:

<Slider Orientation="Vertical" Height="200" Minimum="0" Maximum="10" Value="0" IsSnapToTickEnabled="True" TickFrequency="1" />


Para aquellos que quieran ajustar a posiciones específicas , también puede usar la propiedad Ticks :

<Slider Minimum="1" Maximum="500" IsSnapToTickEnabled="True" Ticks="1,100,200,350,500" />


Si establece sus marcas de la manera correcta, puede usar IsSnapToTickEnabled . Esto funcionó bastante bien para mí. Ver MSDN para más detalles.