WPF/C#

2009-05-06 6 views
19

में टेक्स्टबॉक्स पर कर्सर फोकस वर्तमान में मैं ऑनस्क्रीन कीबोर्ड बनाने की प्रक्रिया में हूं। मैं रूटेड कमांड का उपयोग कर बटन क्लिक कर रहा हूं। मुद्दा यह है कि जब मैं कीबोर्ड पैनल में बटन पर क्लिक करता हूं तो फोकस टेक्स्टबॉक्स के बजाए बटन पर बदल जाता है। आवश्यकता बताती है कि अगला कर्सर डालने की स्थिति को इंगित करने के लिए कर्सर को हमेशा टेक्स्ट बॉक्स में दिखाना चाहिए। बटन क्लिक होने पर मैं टेक्स्टबॉक्स पर ध्यान केंद्रित कर सकता हूं।WPF/C#

उत्तर

32

एक इनपुट नियंत्रण

FocusManager.SetFocusedElement(this, textboxJack);  // set logical focus 

तार्किक फोकस सेट करने के लिए एक इनपुट नियंत्रण

Keyboard.Focus(textboxJill);        // set keyboard focus 

लिए कीबोर्ड के सेट करने के लिए MSDN पर तार्किक और कीबोर्ड के

Input Overview - Focus के बीच अंतर पता करने के लिए

3

मुझे ये करना मेरा होमवर्क पसंद है मेरे लिए सवाल; "आवश्यकता राज्य" ... अमूल्य। Google के माध्यम से इसे ढूंढने वालों के लिए, एक WPF टेक्स्टबॉक्स में कर्सर को व्यावहारिक रूप से स्थानांतरित करने की चाल SelectONStart प्रॉपर्टी का उपयोग करना है।

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    textBox.Focus(); 
    textBox.SelectionStart = textName.Text.Length; 
} 
+31

यह "डू-माय-होमवर्क-फॉर-मी" प्रश्न नहीं है। यह एक है "मैं अपना होमवर्क कर रहा हूं, लेकिन मैं अटक गया हूं, क्या कोई मुझे कुछ पॉइंटर्स दे सकता है" प्रश्न। –

2

तरह से मैं इस समस्या का समाधान सभी बटन/कीबोर्ड पर नियंत्रण करने के लिए focusable=false स्थापित करने के लिए किया गया था। इस तरह आप वर्तमान नियंत्रण पर ध्यान केंद्रित नहीं करते हैं।

1

आपकी समस्या को आपके "कीबोर्ड" के लिए अलग-अलग फ़ोकस स्कोप का उपयोग करके हल किया जा सकता है। बस नियंत्रण है कि आपके बटन के सभी शामिल हैं के लिए निम्न संपत्ति लागू करते हैं और फिर वे एक अलग ध्यान देने के दायरे में हो जाएगा और जब

FocusManager.IsFocusScope="True" 
3
Textbox.Focus(); 

इस पर ध्यान दिया जाएगा क्लिक किया फोकस उन्हें करने के लिए सेट की जरूरत नहीं होगी टेक्स्टबॉक्स

6

विशिष्ट नियंत्रण (उस मामले में टेक्स्टबॉक्स) के लिए संदर्भ प्राप्त करें। क्लिक करने के बाद, Button_Click विधि में इस पेस्ट:

Dispatcher.BeginInvoke((ThreadStart)delegate 
      { 
       control.Focus(); 
      }); 
+0

मेरे लिए, जस्ट जस्ट बस यह काम करता है। धन्यवाद... –

1

मैं इस का उपयोग करने के लिए अपने वांछित परिणाम

FocusManager.SetFocusedElement(this, UserNameautoCompleteBox); 

Key key = Key.Enter;     // Key to send 
var target = Keyboard.FocusedElement; // Target element 
RoutedEvent routedEvent = Keyboard.KeyDownEvent; // Event to send 

target.RaiseEvent(
    new KeyEventArgs(
     Keyboard.PrimaryDevice, 
     PresentationSource.FromVisual(UserNameautoCompleteBox), 
     0, 
     key) { RoutedEvent = routedEvent } 
); 
0

मैं एक ही बात करना चाहता था, लेकिन कुछ भी मेरे लिए काम करने के लिए लग रहा था पाने के लिए था। मुझे वास्तव में एक ऐसे उत्तर की आवश्यकता है जो पूरी तरह से एक्सएएमएल में काम करे क्योंकि मैं एमवीवीएम के साथ काम कर रहा हूं।

मैं अंत में इस उदाहरण पाया: http://spin.atomicobject.com/2013/03/06/xaml-wpf-textbox-focus/

और यह करने के लिए इसे संशोधित:

<Style x:Key="FocusTextBox" TargetType="Grid"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding ElementName=textBoxName, Path=IsVisible}" Value="True"> 
       <Setter Property="FocusManager.FocusedElement" Value="{Binding ElementName=textBoxName}"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 

मेरी ग्रिड परिभाषा में:

<Grid Style="{StaticResource FocusTextBox}" /> 

'संसाधन' अनुभाग में