Cara mengatur fokus pada TextBoxelemen di WPF
Saya memiliki kode ini:
txtCompanyID.Focusable = true;
txtCompanyID.Focus();
... tapi tidak berhasil.
Ada ide?
Cara mengatur fokus pada TextBoxelemen di WPF
Saya memiliki kode ini:
txtCompanyID.Focusable = true;
txtCompanyID.Focus();
... tapi tidak berhasil.
Ada ide?
Jawaban:
Di XAML:
<StackPanel FocusManager.FocusedElement="{Binding ElementName=Box}">
<TextBox Name="Box" />
</StackPanel>
Sejauh ini tidak ada yang menjelaskan mengapa kode dalam pertanyaan tersebut tidak berfungsi. Dugaan saya adalah bahwa kode tersebut ditempatkan di konstruktor Window. Namun saat ini masih terlalu dini untuk menetapkan fokus. Itu harus dilakukan setelah Jendela siap untuk interaksi. Tempat terbaik untuk kode adalah acara Loaded:
public KonsoleWindow() {
public TestWindow() {
InitializeComponent();
Loaded += TestWindow_Loaded;
}
private void TestWindow_Loaded(object sender, RoutedEventArgs e) {
txtCompanyID.Focus();
}
}
Focus()memerlukan parameter status fokus - misalnyatxtCompanyId.Focus(FocusState.Keyboard)
coba FocusManager.SetFocusedElement
FocusManager.SetFocusedElement(parentElement, txtCompanyID)
txtCompanyID.Focusable = true;
Keyboard.Focus(txtCompanyID);
msdn:
Hanya ada satu elemen di seluruh desktop yang memiliki fokus keyboard. Di WPF, elemen yang memiliki fokus keyboard akan membuat IsKeyboardFocused disetel ke true.
Anda dapat memutuskan setelah garis pengaturan dan memeriksa nilai IsKeyboardFocusedproperti. Juga periksa apakah Anda benar-benar mencapai garis itu atau mungkin Anda menyetel beberapa elemen lain untuk mendapatkan fokus setelah itu.
Coba ini : MyTextBox.Focus ( );
Tak satu pun dari ini berhasil untuk saya karena saya menggunakan kisi daripada StackPanel.
Saya akhirnya menemukan contoh ini: http://spin.atomicobject.com/2013/03/06/xaml-wpf-textbox-focus/
dan mengubahnya menjadi ini:
Di bagian 'Sumber Daya':
<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>
Dalam definisi kisi saya:
<Grid Style="{StaticResource FocusTextBox}" />
Jika Anda belum menemukan solusi di jawaban lain, begitulah cara saya menyelesaikan masalah.
Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
TEXTBOX_OBJECT.Focus();
}), System.Windows.Threading.DispatcherPriority.Render);
Dari apa yang saya pahami, solusi lain mungkin tidak berfungsi karena panggilan ke Focus()dipanggil sebelum aplikasi membuat komponen lain.
Solusi lain yang mungkin adalah dengan menggunakan FocusBehavior yang disediakan oleh Kerangka MVVM DevExpress gratis :
<TextBox Text="This control is focused on startup">
<dxmvvm:Interaction.Behaviors>
<dxmvvm:FocusBehavior/>
</dxmvvm:Interaction.Behaviors>
</TextBox>
Ini memungkinkan Anda untuk memfokuskan kontrol saat dimuat, saat peristiwa tertentu dimunculkan atau properti diubah.
Dalam Kode belakang Anda dapat mencapainya hanya dengan melakukan ini.
private void Window_Loaded(object sender, RoutedEventArgs e)
{
txtIndex.Focusable = true;
txtIndex.Focus();
}
Catatan: Ini tidak akan berfungsi sebelum jendela dimuat