2009-04-02 14 views
7

में कैप्चरिंग टैब मैं सिल्वरलाइट टेक्स्टबॉक्स में दर्ज एक टैब कैप्चर कैसे कर सकता हूं और इसके स्थान पर 4 रिक्त स्थान (या एक टैब) प्रस्तुत कर सकता हूं?सिल्वरलाइट टेक्स्टबॉक्स

मैं टैब नेविगेशन को अवरुद्ध करने का तरीका नहीं समझ सकता।

+0

सिल्वरलाइट में पाठ बॉक्स नियंत्रण एक "AcceptsTab" संपत्ति है? टेक्स्टबॉक्स द्वारा संसाधित होने वाली टैब कुंजी के लिए आपको इसे सही पर सेट करना होगा। –

+0

नहीं, मुझे उस संपत्ति को इंटेलिसेंस में या अभिव्यक्ति मिश्रण में नहीं दिख रहा है –

उत्तर

8

उसका ':

 private const string Tab = " "; 
    void textBox_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.Key == Key.Tab) 
     { 
      int selectionStart = textBox.SelectionStart; 
      textBox.Text = String.Format("{0}{1}{2}", 
       textBox.Text.Substring(0, textBox.SelectionStart), 
       Tab, 
       textBox.Text.Substring(textBox.SelectionStart + textBox.SelectionLength, (textBox.Text.Length) - (textBox.SelectionStart + textBox.SelectionLength)) 
       ); 
      e.Handled = true; 
      textBox.SelectionStart = selectionStart + Tab.Length; 
     } 
    } 

यह बर्ताव करता है बस कैसे आप भले ही आप कुछ पाठ चुनें और ol मारा उम्मीद (कोड "टैब" कुंजी ई मैं जोहानिस के समान)' क्या करते हैं।

एक और बात: मैंने टैब स्ट्रिंग को "\ t" के रूप में रखने का प्रयास किया, लेकिन इसका कोई फायदा नहीं हुआ। टैब प्रदान किया गया, लेकिन एक ही स्थान की चौड़ाई थी - इसलिए टैब के लिए मान चार रिक्त स्थान है।

1

मुझे यकीन नहीं है कि आपकी समस्या का समाधान कैसे करें, मैंने एक समाधान को एक साथ हैक किया हालांकि यह काम करता है।

कुंजीडाउन ईवेंट को नीचे के रूप में सेट करें।

void expenses_KeyDown(object sender, KeyEventArgs e) 
     { 
      if (e.Key == Key.Tab) 
      { 
       expenses.Text += " "; 
       expenses.Focus(); 
       expenses.LostFocus += new RoutedEventHandler(expenses_LostFocus); 
      } 
     } 

और फिर LostFocus में:

void expenses_LostFocus(object sender, RoutedEventArgs e) 
     { 
      expenses.Focus(); 
      expenses.Select(expenses.Text.Length - 1, 0); 
     } 

LostFocus में अंतिम पंक्ति पाठ के अंत करने के लिए संपादन कर्सर सेट

expenses.KeyDown += new KeyEventHandler(expenses_KeyDown); 

उस स्थिति में मैं निम्नलिखित कोड डाल , अन्यथा, जब यह फोकस हो जाता है, कर्सर की स्थिति टेक्स्टबॉक्स की शुरुआत में होती है

1

यह मेरे लिए अच्छी तरह से काम करने के लिए लग रहा था, और दूसरा ईवेंट हैंडलर या पाठ बॉक्स नाम की कड़ी कोडिंग की आवश्यकता नहीं है:

void TabbableTextBox_KeyDown(object sender, KeyEventArgs e) 
     { 
      if (e.Key == Key.Tab) 
      { 
       e.Handled = true; 

       var tb = ((TextBox)sender); 
       tb.Text += "\t"; 
       tb.Select(tb.Text.Length, 0); 
      } 
     }