2008-10-06 4 views
93

सभी अक्सर मैं एक WPF स्लाइडर चाहता हूं जो सिस्टम की तरह व्यवहार करता है। Windows.Forms.TrackBar पुरानी। यही है, मैं एक स्लाइडर चाहता हूं जो एक्स से वाई तक जाता है लेकिन केवल उपयोगकर्ता को इसे पूर्ण पूर्णांक स्थितियों में स्थानांतरित करने की अनुमति देता है।आप एक पूर्णांक स्थिति को अलग करने के लिए केवल एक WPF स्लाइडर स्नैप कैसे बनाते हैं?

स्लाइडर पर मूल्य संपत्ति डबल होने के बाद से यह WPF में कैसे करता है?

उत्तर

82

आप सही तरीके से अपने टिक के निशान सेट हैं, तो आप उपयोग कर सकते हैं IsSnapToTickEnabled। यह मेरे लिए बहुत अच्छा काम किया। विवरण के लिए MSDN देखें।

136

सरल जवाब है कि आप IsSnapToTickEnabled और TickFrequency गुण का लाभ लेने के लिए है। यही है, टिक पर आवृत्ति को चालू करें और टिक आवृत्ति को 1.

या अन्य शब्दों में ... टिकों का लाभ उठाएं ... लेकिन आपको जरूरी नहीं है कि आप उन टिकों को दिखाएं जो आप स्नैप कर रहे हैं सेवा मेरे।

बाहर चेक XAML का निम्न भाग:

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

यह उत्तर स्वीकार्य होना चाहिए। एक जादू की तरह काम करता है। धन्यवाद – Ashbay

+0

धन्यवाद @ एशबे ... उस समय, मैं जवाब के लिए किसी और को क्रेडिट देना चाहता था ... बस अपना उत्तर स्वीकार करने के बजाय। – cplotts

42

उन है कि विशिष्ट पदों स्नैप करना चाहते हैं के लिए, आप भी Ticks संपत्ति का उपयोग कर सकते हैं:

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

तस्वीर चाल काम है, लेकिन, सीमाएँ हैं उदाहरण के लिए यदि आप केवल एक उप समूह दिखाना चाहते हैं वैध टिकों का। मुझे दो विकल्पों के साथ सफलता मिली है: या तो एक पूर्णांक से जुड़ें या नए मूल्य के चारों ओर बाध्य करें।

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

मैं पता नहीं कैसे या तो के प्रदर्शन स्नैप चाल की तुलना में है, लेकिन मैं किसी भी मुसीबत * नहीं था: यहाँ एक संयुक्त उदाहरण है।

* यदि आप भी पाठ क्षेत्र का एक प्रकार के लिए स्लाइडर का मूल्य बाँध अगर आपको लगता है कि अनुभव होगा, हर एक बार ही सही अगर माउस का उपयोग कर, पाठ क्षेत्र दशमलव दिखाएगा। यदि आप एक ही समय में एक इंट से जुड़ते हैं तो खाली स्ट्रिंग एक रूपांतरण अपवाद फेंकने का कारण बनती है जो संक्षेप में यूआई को दबा देती है। समाधान के लिए मेरे लिए ये मुद्दे काफी गंभीर नहीं हैं।

+0

तो क्या यह उपयोगकर्ता को स्लाइडर पर अन्य मान भी प्राप्त करने की अनुमति देता है? या फिर भी यह केवल टिकों के मूल्य को चुनने की अनुमति देता है। एक अजीब सवाल की तरह ... उम्मीद है कि आप समझते हैं कि मैं क्या पूछ रहा हूं। – JLott

+1

@JLott: आप अभी भी केवल 'टिक्स' मानों (0, 10, 20, ...) पर स्नैप कर सकते हैं, लेकिन (1, 2, ...) के बीच के सभी मान मान्य हैं और उदाहरण के साथ चुना जा सकता है। ऐरो कुंजी। – mkjeldsen

+0

ओह साफ। मुझे एहसास नहीं हुआ ... धन्यवाद! – JLott

संबंधित मुद्दे