Domanda

Troppo spesso voglio uno slider WPF che si comporti come il vecchio System.Windows.Forms.TrackBar. Cioè, voglio un dispositivo di scorrimento che va da X a Y ma consente solo all'utente di spostarlo in posizioni intere discrete.

Come si fa in WPF poiché la proprietà Value sullo Slider è doppia?

È stato utile?

Soluzione

Se imposti i segni di spunta nel modo giusto, puoi utilizzare IsSnapToTickEnabled . Questo ha funzionato abbastanza bene per me. Vedi MSDN per i dettagli.

Altri suggerimenti

La semplice risposta è che sfrutti le proprietà IsSnapToTickEnabled e TickFrequency . Cioè, attiva lo scatto in tick e imposta la frequenza di tick su 1.

In altre parole ... approfitta delle zecche ... ma non devi necessariamente mostrare le zecche a cui stai scattando.

Dai un'occhiata al seguente pezzo di xaml:

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

Per coloro che vogliono agganciarsi a specifiche posizioni, puoi anche usare la proprietà Ticks :

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

Il trucco è pratico ma presenta delle limitazioni, ad esempio se si desidera mostrare solo un sottoinsieme di tick validi. Ho avuto successo con due alternative: o associare a un numero intero o arrotondare il nuovo valore. Ecco un esempio combinato:

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"/>

Non ho idea di come le prestazioni siano paragonabili a quelle del trucco, ma non ho avuto problemi *.

* Se anche associ il valore del dispositivo di scorrimento a un tipo di campo di testo, sperimenterai che, ogni tanto se usi il mouse, il campo di testo mostrerà i decimali. Se si associa anche a un int allo stesso tempo, la stringa vuota provocherà un'eccezione di conversione che blocca brevemente l'interfaccia utente. Questi problemi non sono stati abbastanza gravi per me cercare soluzioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top