2010-05-10 18 views
7

जैसे एक WPF टेक्स्टबॉक्स नियंत्रण बनाना मैं एक WPF टेक्स्टबॉक्स नियंत्रण बनाना चाहता हूं जो Outlook (ईमेल, टू, सीसी और बीसीसी इनपुट) में ईमेल प्राप्तकर्ता टेक्स्टबॉक्स के समान कार्य करता है। मुझे जरूरी नहीं कि ऑटो-पूर्णता के बारे में बहुत कुछ परवाह नहीं है (मुझे इसके लिए लाखों उदाहरण मिल गए हैं), लेकिन मैं वास्तव में किसके साथ संघर्ष कर रहा हूं यह है कि पाठ बॉक्स में सीमित टेक्स्ट प्रविष्टियां कैसे करें, जैसे वे करते हैं आउटलुक (एक प्राप्तकर्ता जिसे आपने दर्ज किया है, वह पाठ एक 'इकाई' बन जाता है जिसे आप चुनने के लिए क्लिक कर सकते हैं, संदर्भ मेनू प्राप्त करने के लिए राइट क्लिक करें, आदि। यह अब 'सादा पाठ' नहीं है जिसमें आप अपना कर्सर रख सकते हैं) ...आउटलुक ईमेल प्राप्तकर्ता टेक्स्टबॉक्स

क्या किसी के पास उच्च स्तर के विचार हैं कि इसे कैसे पूरा किया जाए? किसी मौजूदा उदाहरण के बारे में जानें (मैंने घंटों तक गुगल किया है)?

अग्रिम धन्यवाद,

माइकल।

+0

शायद यह आलेख आपकी मदद कर सकता है: [टैगबॉक्स का परिचय] (http://www.thesilvermethod.com/Default.aspx?Id=IntroducingTagBox) – xVir

+0

http://blog.pixelingene.com/2010/10/tokenizing- नियंत्रण-कन्वर्ट-टेक्स्ट-टू-टोकन/ - इस नियंत्रण पर नज़र डालें – Sahadevan

उत्तर

5

मेरी मोटा विचार प्रक्रिया यह होगी ... (नोट: मैं वास्तव में इसे कोडिंग नहीं कर रहा हूं, इसलिए मेरा विवरण थोड़ा सा हो सकता है ...)।

उच्च स्तर व्यवहार:

  • आपके नियंत्रण में डेटा के प्रकार के आइटम जो चयन नहीं कर रहे हैं की एक सूची है। इसलिए आपका नियंत्रण लगभग ItemsControl (दृश्य/एक्सएएमएल के संदर्भ में, यह ItemsControl है WrapPanel शैली लेआउट के साथ और आइटम टेम्पलेट के लिए बहुत सरल TextBlock)।
  • जब आपके नियंत्रण लाभ ध्यान देते हैं, आप जब अपने नियंत्रण ध्यान देते हैं, कि आपके द्वारा इनपुट पाठ विभाजित है और प्रदर्शन के लिए एक सूची में बदलने की आवश्यकता खो देता है एक TextBox
  • होने के लिए टेम्पलेट स्विच करना होगा।

इसलिए, सोच कोड:

  • आप एक UserControl की जरूरत है, संभवतः ItemsControl से ली गई। यह आपको वस्तुओं की सूची का प्रतिनिधित्व करने के लिए मूल व्यवहार देता है।
  • आपको अपने नियंत्रण पर एक कस्टम DependencyProperty की आवश्यकता है जो सीमित स्ट्रिंग का प्रतिनिधित्व करता है।
  • जब स्ट्रिंग प्रॉपर्टी बदलती है, तो आपको इसे पार्स करने और नियंत्रण में आइटम्स की सूची को प्रतिस्थापित करने की आवश्यकता होती है।
  • जब सूची संपत्ति बदलती है, तो आपको स्ट्रिंग प्रॉपर्टी को उपयुक्त-सीमित सूची से प्रतिस्थापित करने की आवश्यकता होती है।

कोड-पीछे के मामले में, वह हिस्सा बहुत सरल होना चाहिए। फिर, XAML टेम्पलेट के लिए ...

  • आपको लगता है कि एक सूची के रूप में अपने Items संपत्ति को प्रदर्शित करता है, WrapPanel लेआउट ऊपर उल्लेख किया है का उपयोग कर किसी मूल टेम्पलेट की जरूरत है।
  • आपको एक ट्रिगर की आवश्यकता है जो नियंत्रण पर ध्यान केंद्रित करते समय इस टेम्पलेट को प्रतिस्थापित करता है।
  • प्रतिस्थापन टेम्पलेट TextBox होना चाहिए जो नियंत्रण की स्ट्रिंग प्रॉपर्टी से जुड़ा हुआ है।
  • TextBox पर डिफ़ॉल्ट बाध्यकारी व्यवहार केवल TextBox फोकस खोने पर एक नया मान धक्का देगा, इसलिए आपको यह सोचने की आवश्यकता है कि आप "एंटर" कीप्रेस फोकस फोकस करना चाहते हैं (इस प्रकार टेम्पलेट को वापस ले जाएं) सूची संस्करण - जब स्ट्रिंग प्रॉपर्टी का मान बदलता है, तो आपका कोडबेइंड सूची अपडेट करेगा)।

यह आपको मूल व्यवहार देना चाहिए। आप सूची संपत्ति के बाहर से स्ट्रिंग प्रॉपर्टी या को बाध्य करने में सक्षम होना चाहिए, हालांकि आपको सावधान रहना होगा कि क्या होता है यदि आप दोनों गुणों को बाध्य करते हैं क्योंकि उनके बीच दो-तरफा निर्भरता है ...

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