TextBox
WPF में एक तत्व पर ध्यान कैसे सेट करें
मेरे पास यह कोड है:
txtCompanyID.Focusable = true;
txtCompanyID.Focus();
...लेकिन यह काम नहीं कर रहा है।
कोई उपाय?
TextBox
WPF में एक तत्व पर ध्यान कैसे सेट करें
मेरे पास यह कोड है:
txtCompanyID.Focusable = true;
txtCompanyID.Focus();
...लेकिन यह काम नहीं कर रहा है।
कोई उपाय?
जवाबों:
XAML में:
<StackPanel FocusManager.FocusedElement="{Binding ElementName=Box}">
<TextBox Name="Box" />
</StackPanel>
किसी ने अब तक यह नहीं बताया कि प्रश्न में कोड क्यों काम नहीं करता है। मेरा अनुमान है कि कोड को विंडो के कंस्ट्रक्टर में रखा गया था। लेकिन इस समय ध्यान केंद्रित करना जल्दबाजी होगी। एक बार विंडो इंटरेक्शन के लिए तैयार होने के बाद इसे करना होगा। कोड के लिए सबसे अच्छी जगह भरी हुई घटना है:
public KonsoleWindow() {
public TestWindow() {
InitializeComponent();
Loaded += TestWindow_Loaded;
}
private void TestWindow_Loaded(object sender, RoutedEventArgs e) {
txtCompanyID.Focus();
}
}
Focus()
लिए फ़ोकस राज्य पैरामीटर की आवश्यकता है - जैसेtxtCompanyId.Focus(FocusState.Keyboard)
FocusManager.SetFocusedElement की कोशिश करें
FocusManager.SetFocusedElement(parentElement, txtCompanyID)
txtCompanyID.Focusable = true;
Keyboard.Focus(txtCompanyID);
MSDN:
पूरे डेस्कटॉप पर केवल एक ही तत्व हो सकता है जिसमें कीबोर्ड फोकस हो। WPF में, जिस तत्व में कीबोर्ड फ़ोकस है, उसमें IsKeyboardFocused सेट होगा जो सही है।
आप सेटिंग लाइन के बाद टूट सकते हैं और IsKeyboardFocused
संपत्ति के मूल्य की जांच कर सकते हैं। यह भी जांच लें कि क्या आप वास्तव में उस रेखा तक पहुंचते हैं या हो सकता है कि आप इसके बाद ध्यान केंद्रित करने के लिए कोई अन्य तत्व निर्धारित करते हैं।
इसे इस्तेमाल करे : MyTextBox.Focus ( );
इसमें से किसी ने भी मेरे लिए काम नहीं किया क्योंकि मैं एक 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}" />
मामले में आप अन्य जवाब पर समाधान नहीं मिला है, कि कैसे मैं इस मुद्दे को हल किया है।
Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
TEXTBOX_OBJECT.Focus();
}), System.Windows.Threading.DispatcherPriority.Render);
जो मैं समझता हूं कि अन्य समाधान काम नहीं कर सकते हैं क्योंकि Focus()
एप्लिकेशन को अन्य घटकों को प्रस्तुत करने से पहले कॉल को लागू करना है।
एक अन्य संभावित समाधान फोकसबेहेयर का उपयोग करना है MVVM फ्रेमवर्क द्वारा प्रदान :
<TextBox Text="This control is focused on startup">
<dxmvvm:Interaction.Behaviors>
<dxmvvm:FocusBehavior/>
</dxmvvm:Interaction.Behaviors>
</TextBox>
यह आपको लोड होने पर नियंत्रण पर ध्यान केंद्रित करने की अनुमति देता है, जब एक निश्चित घटना को उठाया जाता है या एक संपत्ति को बदल दिया जाता है।
पीछे कोड में आप ऐसा करके ही इसे प्राप्त कर सकते हैं।
private void Window_Loaded(object sender, RoutedEventArgs e)
{
txtIndex.Focusable = true;
txtIndex.Focus();
}
नोट: विंडो लोड होने से पहले यह काम नहीं करेगा