2010-01-28 4 views

Antwort

10

Die Eigenschaft Interval hat keine Auswirkungen auf dieses Verhalten. diese

Verwendung:

<Slider TickFrequency="5" IsSnapToTickEnabled="True" /> 
+3

arbeitet Dies gilt nicht: die Zecken auf 5% -Schritten Einstellung wird in dem View-Modell Konstruktor getan. Es ist nicht möglich, jetzt mit einer anderen Frequenz als 5 zu schnappen. –

5
<Slider TickPlacement="TopLeft" Minimum="0" Maximum="50" TickFrequency="5" IsSnapToTickEnabled="False" SmallChange="1" /> 

deaktivieren Fangen von Zecken mit IsSnapToTickEnabled="False" und setzen SmallChange="1".

SmallChange bestimmt die Schrittweite beim Ziehen des Daumens oder Drücken der Pfeiltasten. Sie können das Inkrement auch steuern, wenn der Benutzer auf den Schieberegler (nicht auf den Daumen) klickt. Um den Daumen zu springen, verwenden Sie LargeChange="10", um 10 Einheiten zu überspringen. Um den Schieberegler dahin zu verschieben, wo der Benutzer geklickt hat, verwenden Sie IsMoveToPointEnabled="True". Hinweis: IsMoveToPointEnabled setzt den Daumen auf das nächste SmallChange-Inkrement.

+2

'SmallChange' beeinflusst das Ziehen des Daumens überhaupt nicht. Also diese Lösung funktioniert nicht. –

3

Der normale WPF Slider kann nur alle oder keine Markierungen zeichnen.
Um diese Einschränkung zu umgehen, können Sie entweder Ihre eigenen Slider erstellen oder Sie können einen Trick verwenden: Deaktivieren Sie die SliderTickBar und zeichnen Sie Ihre eigenen.

<StackPanel> 
    <TickBar Maximum="{Binding Path=Maximum, ElementName=MySlider}" 
     Minimum="{Binding Path=Minimum, ElementName=MySlider}" TickFrequency="5" Height="4" 
     Fill="Black" ReservedSpace="11" /> 
    <Slider Name="MySlider" Maximum="50" TickPlacement="None" IsSnapToTickEnabled="True" /> 
</StackPanel> 

ReservedSpace ist das kombinierte Feld nach links und rechts von den äußersten Zecken, die genau das gleiche wie die Thumb ‚s breit ist. Es ist normalerweise 11 Pixel. Wenn Sie ein ungewöhnliches Thema verwenden oder es auf andere Weise durcheinander bringen, müssen Sie es auch in Ihrem neuen TickBar anpassen.

Diese Lösung hat einen Nachteil: Der Thumb wird nicht spitz sein, weil der Slider denkt, dass er keine Häkchen hat. Wenn Sie die Thumb seine spitzen wollen, müssen Sie die Slider Trick von ihm ein TickBar geben und es dann später kollabieren:

<StackPanel> 
    <TickBar Maximum="{Binding Path=Maximum, ElementName=MySlider2}" 
     Minimum="{Binding Path=Minimum, ElementName=MySlider2}" TickFrequency="5" 
     Height="4" Fill="Black" ReservedSpace="11" /> 
    <Slider Name="MySlider2" Maximum="50" TickPlacement="TopLeft" 
     IsSnapToTickEnabled="True"/> 
</StackPanel> 

Und dann in Ihrem Window ‚s Konstruktor (nach InitializeComponent()):

this.Loaded += (sender, e) => 
{ 
    var sliderTickBar = (MySlider2.Template.FindName("TopTick", MySlider2) as 
     System.Windows.Controls.Primitives.TickBar); 
    sliderTickBar.Visibility = Visibility.Collapsed; 
}; 
1

Ich löste das gleiche Problem, indem ich nur die Ticks anzeigte, die ich wollte, indem ich die Ticks-Eigenschaft setzte, IsSnapToTickEnabled auf false setzte und die Bindung des Slider-Werts runderte. In meinem Beispiel möchte ich den Schieberegler für 0 bis 100% anzeigen, Ticks in 5% -Schritten anzeigen und den Schritt auf 1% setzen.

Die XAML:

<Slider Minimum="0" Maximum="100" 
    TickPlacement="BottomRight" Ticks="{Binding PercentTicks}" 
    TickFrequency="1" SmallChange="1" LargeChange="5" 
    Value="{Binding MyProperty, Converter={StaticResource PercentageConverter}}" /> 

Die Ansicht Modell:

public double MyProperty 
    { 
     get { return myProperty; } 
     set 
     { 
      myProperty = Math.Round(value, 2); 
      OnPropertyChanged(); 
     } 
    } 

myProperty Wert von 0 bis 1, so zu 2 Ziffern Rundung ergibt genau 1% Schritt!

var ticks = new DoubleCollection(); 
for (int i = 0; i <= 100; i+=5) 
{ 
    ticks.Add(i); 
} 
PercentTicks = ticks;