2010-02-26 14 views
45

This other SO question डब्ल्यूपीएफ में एक स्वतः पूर्ण टेक्स्टबॉक्स के बारे में पूछता है। कई लोगों ने इनका निर्माण किया है, और वहां दिए गए उत्तरों में से एक this codeproject article सुझाता है।डब्ल्यूपीएफ: ऑटोकंपलेट टेक्स्टबॉक्स, ... फिर से

लेकिन मुझे कोई भी WPF स्वत: पूर्ण टेक्स्टबॉक्स नहीं मिला है जो WinForms स्वत: पूर्ण टेक्स्टबॉक्स से तुलना करता है। codeproject नमूना काम करता है, एक तरह से, ...

alt text http://i50.tinypic.com/sx2ej5.jpg

... लेकिन

  • यह एक फिर से प्रयोग करने योग्य नियंत्रण या DLL के रूप में संरचित नहीं है। यह कोड है जो मुझे हर ऐप में एम्बेड करने की ज़रूरत है।
  • यह केवल निर्देशिकाओं के साथ काम करता है। इसमें यह निर्धारित करने के लिए गुण नहीं हैं कि स्वत: पूर्ण स्रोत केवल फाइल सिस्टम निर्देशिका है, या फाइल सिस्टम फ़ाइलें, या .... आदि। मैं यह करने के लिए कोड लिख सकता हूं, लेकिन ... मैं पहले से लिखे गए किसी और के कोड का उपयोग करना चाहता हूं।
  • इसमें पॉपअप आकार, आदि सेट करने के गुण नहीं हैं
  • एक पॉपअप सूचीबॉक्स है जो सकारात्मक पूर्णता प्रस्तुत करता है। उस सूची के माध्यम से नेविगेट करते समय, टेक्स्टबॉक्स नहीं बदलता है। सूची बॉक्स में केंद्रित होने पर एक वर्ण टाइप करना टेक्स्टबॉक्स को अद्यतन करने का कारण नहीं बनता है।
  • सूची बॉक्स से दूर ध्यान केंद्रित करने से पॉपअप सूची बॉक्स गायब नहीं होता है। यह भ्रामक है।

तो, मेरे सवाल:

* किसी को भी एक नि: शुल्क WPF स्वत: पूर्ण पाठ बॉक्स कि काम करता है, और एक गुणवत्ता यूआई अनुभव प्रदान करता है है *


उत्तर

?

यहां बताया गया है कि मैंने यह कैसे किया:

.0। WPF Toolkit

प्राप्त करें .1। WPF टूलकिट

के लिए एमएसआई चलाएं .2। विजुअल स्टूडियो के भीतर, यूआई डिज़ाइनर में टूलबॉक्स से खींचें/छोड़ें - विशेष रूप से डेटा विज़ुअलाइज़ेशन समूह -। यह वी.एस. पिटारे में इस तरह दिखता है:

alt text http://i49.tinypic.com/s12q6x.jpg

आप डिजाइनर, हाथ से शिल्प XAML का उपयोग नहीं करना चाहते हैं। यह इस तरह दिखता है:


<toolkit:AutoCompleteBox 
    ToolTip="Enter the path of an assembly." 
    x:Name="tbAssembly" Height="27" Width="102" 
    Populating="tbAssembly_Populating" /> 

... जहां टूलकिट नाम स्थान इस तरह से मैप किया गया है:

xmlns:toolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit" 

.3। Populating ईवेंट के लिए कोड प्रदान करें।यहाँ मैं क्या इस्तेमाल किया है:


private void tbAssembly_Populating(object sender, System.Windows.Controls.PopulatingEventArgs e) 
{ 
    string text = tbAssembly.Text; 
    string dirname = Path.GetDirectoryName(text); 

    if (Directory.Exists(Path.GetDirectoryName(dirname))) 
    { 
     string[] files = Directory.GetFiles(dirname, "*.*", SearchOption.TopDirectoryOnly); 
     string[] dirs = Directory.GetDirectories(dirname, "*.*", SearchOption.TopDirectoryOnly); 
     var candidates = new List<string>(); 

     Array.ForEach(new String[][] { files, dirs }, (x) => 
      Array.ForEach(x, (y) => 
         { 
          if (y.StartsWith(dirname, StringComparison.CurrentCultureIgnoreCase)) 
           candidates.Add(y); 
         })); 

     tbAssembly.ItemsSource = candidates; 
     tbAssembly.PopulateComplete(); 
    } 
} 

यह काम करता है, अभी जिस तरह तुम उम्मीद थी। यह पेशेवर लगता है। कि codeproject नियंत्रण प्रदर्शन विसंगतियों से कोई भी कर रहे हैं। यह हैं कि यह दिखता है:

alt text http://i50.tinypic.com/24qsopy.jpg


WPF टूलकिट को Thanks to Matt for the pointer

उत्तर

32

WPF Toolkit के नवीनतम ड्रॉप एक AutoCompleteBox भी शामिल है। यह माइक्रोसॉफ्ट, से नियंत्रण की एक मुक्त सेट जिनमें से कुछ नेट 4.

Jeff Wilcox - Introducing the AutoCompleteBox

+0

, पेचीदा ध्वनि मैट। क्या AutoCompleteBox का उपयोग करने पर कोई मार्गदर्शिका या उदाहरण है? मुझे डीएलएल मिला जिसमें यह शामिल है। एक्सएएमएल में मैं किस एक्सएमएलएन का उपयोग करता हूं? मैं वास्तव में इसका उपयोग कैसे करूं? – Cheeso

+0

ध्यान दें कि ब्लॉग पोस्ट लिंक मैंने अभी सिल्वरलाइट के बारे में वार्ताएं जोड़ दी हैं, लेकिन ऑटोकंपलेटबॉक्स भी डब्ल्यूपीएफ के लिए है। –

+0

कोडप्लेक्स पर डब्ल्यूपीएफ टूलकिट मर चुका है, लेकिन गिटहब पर कई फोर्क हैं, अगर किसी को इसकी आवश्यकता है: [jogibear9988/wpftoolkit] (https://github.com/jogibear9988/wpftoolkit), [WPFToolkit.DataVisualization] (https://github.com/davidalpert/WPFToolkit.DataVisualization), [theonlylawislove/WPFToolkit] (https://github.com/theonlylawislove/WPFToolkit), [jrwren/wpftoolkit] (https://github.com/jrwren/wpftoolkit)। – Athari

17

में शामिल किया जाएगा है यहाँ कैसे मैंने किया है:

.1। WPF टूलकिट

के लिए एमएसआई चलाएं .2। विजुअल स्टूडियो के भीतर, यूआई डिज़ाइनर में टूलबॉक्स से खींचें/छोड़ें - विशेष रूप से डेटा विज़ुअलाइज़ेशन समूह -। यह वी.एस. पिटारे में इस तरह दिखता है:

alt text http://i49.tinypic.com/s12q6x.jpg

या, हाथ से शिल्प XAML। यह इस तरह दिखता है:


<toolkit:AutoCompleteBox 
    ToolTip="Enter the path of an assembly." 
    x:Name="tbAssembly" Height="27" Width="102" 
    Populating="tbAssembly_Populating" /> 

... जहां टूलकिट नाम स्थान इस तरह से मैप किया गया है:

xmlns:toolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit" 

.3। Populating ईवेंट के लिए कोड प्रदान करें। यहाँ मैं क्या इस्तेमाल किया है: WPF टूलकिट करने के लिए सूचक के लिए मैट के लिए


private void tbAssembly_Populating(object sender, System.Windows.Controls.PopulatingEventArgs e) 
{ 
    string text = tbAssembly.Text; 
    string dirname = Path.GetDirectoryName(text); 

    if (Directory.Exists(Path.GetDirectoryName(dirname))) 
    { 
     string[] files = Directory.GetFiles(dirname, "*.*", SearchOption.TopDirectoryOnly); 
     string[] dirs = Directory.GetDirectories(dirname, "*.*", SearchOption.TopDirectoryOnly); 
     var candidates = new List<string>(); 

     Array.ForEach(new String[][] { files, dirs }, (x) => 
      Array.ForEach(x, (y) => 
         { 
          if (y.StartsWith(dirname, StringComparison.CurrentCultureIgnoreCase)) 
           candidates.Add(y); 
         })); 

     tbAssembly.ItemsSource = candidates; 
     tbAssembly.PopulateComplete(); 
    } 
} 

धन्यवाद।

2

मैं अपने घर में इस परियोजना में Intellibox का उपयोग करें। http://intellibox.codeplex.com/

मैं इसे बहुत सहज ज्ञान युक्त खोज के लिए प्रदाता पैटर्न के फायदा नहीं है पाते हैं।

रैक का जवाब है कि यह कैसे उपयोग करने के लिए का एक उदाहरण देता है, और के रूप में वह बताते हैं, यह कुछ विकास पिछले साल देखा गया है (हालांकि यह अच्छी तरह से करने के बाद मैं पिछले इसका इस्तेमाल किया है)।

+1

http://intellibox.codeplex.com/ प्रतीत होता है हाल ही में 1 अक्टूबर, 2013 को अपडेट किया गया और इसमें एकल नियंत्रण शामिल है। (धन्यवाद, रेक) – Cheeso

+0

हाँ मैंने थोड़ी देर के लिए उस पर काम नहीं किया है, यह जानकर अच्छा लगा कि उसने तब से कुछ ध्यान देखा है। धन्यवाद! – Troy

2

Mindscape भी एक WPF स्वत: पूर्ण पाठ बॉक्स

http://intellibox.codeplex.com/ सहित एक 3 free controls प्रदान करता है के रूप में अद्यतन प्रतीत होता है हाल ही में अक्टू 1, 2013 और एकल नियंत्रण होता है। मैं ट्रॉय के जवाब पर टिप्पणी के रूप में जोड़ा होता, लेकिन पर्याप्त प्रतिनिधि नहीं है। उस टिप्पणी के कारण मैंने इसे लगभग अनदेखा कर दिया।दस्तावेज़ से

उदाहरण उपयोग:

<auto:Intellibox ResultsHeight="80" 
        ExplicitlyIncludeColumns="True" 
        Name="lightspeedBox" 
        DisplayedValueBinding="{Binding Product_Name}" 
        SelectedValueBinding="{Binding Product_Id}" 
        DataProvider="{Binding RelativeSource={RelativeSource FindAncestor, 
        AncestorType={x:Type Window}}, Path=LinqToEntitiesProvider}" 
        Height="26" 
        Margin="12,26,12,0" 
        VerticalAlignment="Top"> 
     <auto:Intellibox.Columns> 
      <auto:IntelliboxColumn DisplayMemberBinding="{Binding Product_Name}" 
            Width="150" 
            Header="Product Name" /> 
      <auto:IntelliboxColumn DisplayMemberBinding="{Binding Unit_Price}" 
            Width="75" 
            Header="Unit Price" /> 
      <auto:IntelliboxColumn DisplayMemberBinding="{Binding Suppliers.Company_Name}" 
            Width="125" 
            Header="Supplier" /> 
     </auto:Intellibox.Columns> 
    </auto:Intellibox> 
2

आप WPF ऑटो CodePlex यहाँ पर पूरा पाठ बॉक्स की कोशिश कर सकते हैं: https://wpfautocomplete.codeplex.com/

+2

मुझे लगता है कि यह आपकी परियोजना है, और यह अच्छा लग रहा है, लेकिन आपको यहां एक लिंक जोड़ने से ज्यादा कुछ करना चाहिए। कुछ नमूना कोड, निर्देश जोड़ें, दिखाएं कि यह ओपी के लिए एक संभावित समाधान क्यों है। StackOverflow अनिवार्य रूप से एक क्यू एंड ए विकी है, इसलिए उपयोगकर्ताओं को यह देखने के लिए पर्याप्त विवरण देखने की उम्मीद है कि यह समाधान उनके लिए इस साइट से दूर किए बिना काम करेगा। अधिक जानकारी के लिए सभी लोगों द्वारा कोडप्लेक्स साइट पर सीधे लोगों को। –

+1

मैंने अपनी सुबह नेट पर अलग-अलग स्थानों पर प्राप्त स्वत: पूर्ण टेक्स्टबॉक्स को बिताया है। यह अब तक का सबसे अच्छा है, और मैं अपनी परियोजना में उपयोग कर रहा हूं। – dlf

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