पूर्णांक पदों को असतत करने के लिए आप केवल WPF स्लाइडर स्नैप कैसे बनाते हैं?


114

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

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

जवाबों:


95

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


172

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

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

Xaml के निम्नलिखित भाग को देखें:

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

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

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

यह डिज़ाइनर में प्रॉपर्टीज़ डायलॉग के कॉमन सेक्शन के तहत है, लेकिन मेरी मशीन पर, कम से कम, यह तुरंत दिखाई नहीं दे रहा था क्योंकि एडवांस्ड सबसेंप्शन ढह गया था और सभी को अनदेखा करना बहुत आसान था।
amonroejj

46

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

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

10

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

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

मुझे नहीं पता कि स्नैप ट्रिक की तुलना में या तो प्रदर्शन कैसा है लेकिन मुझे कोई परेशानी नहीं हुई *।

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


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

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

ओह नीट मुझे एहसास ही नहीं हुआ कि ... धन्यवाद!
JLott 14

यह सिल्वरलाइट के लिए काम करता है जहां कोई IsSnapToTickEnabledसंपत्ति नहीं है।
40मेगामैन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.