WPF में टेक्स्टबॉक्स पर ध्यान केंद्रित करें


105

TextBoxWPF में एक तत्व पर ध्यान कैसे सेट करें

मेरे पास यह कोड है:

txtCompanyID.Focusable = true;
txtCompanyID.Focus();

...लेकिन यह काम नहीं कर रहा है।

कोई उपाय?


txtCompanyID.Focusable = true; Keyboard.Focus (txtCompanyID); यह काम करता है लेकिन यह कैसे है।
MindRoasterMir

जवाबों:


145

XAML में:

<StackPanel FocusManager.FocusedElement="{Binding ElementName=Box}">
   <TextBox Name="Box" />
</StackPanel>

9
मैं ऊपर दिए गए अन्य लोगों के लिए इस दृष्टिकोण को पसंद करता हूं क्योंकि यह MVVM के अनुरूप है।
टॉड स्प्रंग

1
केंद्रित तत्व आसानी से सही है आप xaml में कैसे सेट कर सकते हैं? मैंने इसका उपयोग किया था और यह काम नहीं किया था <Style.Triggers> <ट्रिगर प्रॉपर्टी = "वैल्यूएशन। एसेरर" वैल्यू = "ट्रू"> <सेटर प्रॉपर्टी = "फ़ोकमैनेजर.फोकस एडेडमेंट" वैल्यू = "{सोर्स" = RelativeSource Self}} " /> </ ट्रिगर> </Style.Triggers>
WPFKK

@ user841612, निम्न लिंक की जाँच करें और असेंबली और Namespace msdn.microsoft.com/en-us/library/…
'22

यह केवल एक बार काम करता है। यदि आप पृष्ठ बनाने के बाद फ़ोकस को बदलना चाहते हैं, तो आपको इसे प्रोग्रामेटिक रूप से करने की आवश्यकता है।
जो स्टील

यह भी काम करता है। txtCompanyID.Focusable = true; Keyboard.Focus (txtCompanyID);
MindRoasterMir

51

किसी ने अब तक यह नहीं बताया कि प्रश्न में कोड क्यों काम नहीं करता है। मेरा अनुमान है कि कोड को विंडो के कंस्ट्रक्टर में रखा गया था। लेकिन इस समय ध्यान केंद्रित करना जल्दबाजी होगी। एक बार विंडो इंटरेक्शन के लिए तैयार होने के बाद इसे करना होगा। कोड के लिए सबसे अच्छी जगह भरी हुई घटना है:

public KonsoleWindow() {
  public TestWindow() {
    InitializeComponent();
    Loaded += TestWindow_Loaded;
  }

  private void TestWindow_Loaded(object sender, RoutedEventArgs e) {
    txtCompanyID.Focus();
  }
}

1
तार्किक रूप से सच है, बहुत संघर्ष के बाद यह उत्तर समाधान के रूप में बहुत अच्छा और सही है।
शिवानी

यह मेरे लिए काम किया। स्वीकृत उत्तर नहीं दिया। धन्यवाद
BoundForGlory

निश्चित नहीं है कि संस्करण विशिष्ट है, लेकिन इसके Focus()लिए फ़ोकस राज्य पैरामीटर की आवश्यकता है - जैसेtxtCompanyId.Focus(FocusState.Keyboard)
Dan

49

FocusManager.SetFocusedElement की कोशिश करें

FocusManager.SetFocusedElement(parentElement, txtCompanyID)

5
क्या होगा अगर तत्व आप के लिए सेट फोकस करना चाहते है पेरेंट तत्व ऊ?
ब्रॉक हेंसले

10
FocusManager.SetFocusedElement (FocusManager.GetFocusScope (parentElement), parentElement);
फिल्टर

26
txtCompanyID.Focusable = true;
Keyboard.Focus(txtCompanyID);

MSDN:

पूरे डेस्कटॉप पर केवल एक ही तत्व हो सकता है जिसमें कीबोर्ड फोकस हो। WPF में, जिस तत्व में कीबोर्ड फ़ोकस है, उसमें IsKeyboardFocused सेट होगा जो सही है।

आप सेटिंग लाइन के बाद टूट सकते हैं और IsKeyboardFocusedसंपत्ति के मूल्य की जांच कर सकते हैं। यह भी जांच लें कि क्या आप वास्तव में उस रेखा तक पहुंचते हैं या हो सकता है कि आप इसके बाद ध्यान केंद्रित करने के लिए कोई अन्य तत्व निर्धारित करते हैं।


19

इसे इस्तेमाल करे : MyTextBox.Focus ( );


2
यह सबसे सुरुचिपूर्ण उत्तर है और इसके लिए आपको माता-पिता को भी निर्दिष्ट करने की आवश्यकता नहीं है। इसके लिए धन्यवाद, यह मेरे लिए बहुत अच्छा काम करता है!
dbeachy1

पीटर ह्यूबर का जवाब यह है, लेकिन यह बताता है कि खिड़की को पहले लोड करने की आवश्यकता है, यही कारण है कि मेरा काम नहीं कर रहा था
एड्रियन डावल

14

इसमें से किसी ने भी मेरे लिए काम नहीं किया क्योंकि मैं एक StackPanel के बजाय एक ग्रिड का उपयोग कर रहा था।

मुझे अंत में यह उदाहरण मिला: 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}" />

2
यह मेरे लिए भी काम किया। बाकी नहीं था। लिंक के लिए धन्यवाद, यह काफी दिलचस्प था। यह भी दिलचस्प है कि इतनी सरल चीज इतनी जटिल हो सकती है।
ट्रैविसहाइड

2
यदि कंटेनर एक गर्ड या स्टैकपैनल है, तो उपरोक्त उत्तर ठीक काम करता है। चूंकि आपके ग्रिड की संरचना स्पष्ट नहीं है, इसलिए यह बताना मुश्किल है कि क्या गलत हो सकता है। हालांकि विकल्पों को देखकर अच्छा लगा।
उपयोगी

1
मेरे लिए, यह सही ढंग से काम करने के लिए केवल एक ही है। बढ़िया तरीका।
ओरेगॉनहॉस्ट

7

मामले में आप अन्य जवाब पर समाधान नहीं मिला है, कि कैसे मैं इस मुद्दे को हल किया है।

Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
    TEXTBOX_OBJECT.Focus();
}), System.Windows.Threading.DispatcherPriority.Render);

जो मैं समझता हूं कि अन्य समाधान काम नहीं कर सकते हैं क्योंकि Focus()एप्लिकेशन को अन्य घटकों को प्रस्तुत करने से पहले कॉल को लागू करना है।


3
यह उत्तर एक बेहतर रैंक का हकदार है।
सिमोन मूरियर

0

एक अन्य संभावित समाधान फोकसबेहेयर का उपयोग करना है MVVM फ्रेमवर्क द्वारा प्रदान :

<TextBox Text="This control is focused on startup">
    <dxmvvm:Interaction.Behaviors>
        <dxmvvm:FocusBehavior/>
    </dxmvvm:Interaction.Behaviors>
</TextBox>

यह आपको लोड होने पर नियंत्रण पर ध्यान केंद्रित करने की अनुमति देता है, जब एक निश्चित घटना को उठाया जाता है या एक संपत्ति को बदल दिया जाता है।


0

पीछे कोड में आप ऐसा करके ही इसे प्राप्त कर सकते हैं।

 private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            txtIndex.Focusable = true;
            txtIndex.Focus();
        }

नोट: विंडो लोड होने से पहले यह काम नहीं करेगा

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