Установите фокус на текстовое поле в xaml wpf
несмотря на некоторые сообщения на этом форуме и другие я не могу найти что-то, что говорит мне, как установить фокус на TextBox
.
У меня есть пользовательских элементов управления с множеством меток и текстовых полей. Когда форма загружается, я хочу, чтобы определенное текстовое поле имело фокус.
я установил tabIndex, но это, похоже, не работает.
какие предложения?
6 ответов:
можно использовать
FocusManager.FocusedElement
вложенное свойство для этой цели. Вот фрагмент кода, который по умолчанию устанавливает фокус на TxtB.<StackPanel Orientation="Vertical" FocusManager.FocusedElement="{Binding ElementName=TxtB}"> <TextBox x:Name="TxtA" Text="A" /> <TextBox x:Name="TxtB" Text="B" /> </StackPanel>
вы также можете использовать
TxtB.Focus()
в вашем коде, если вы не хотите делать это в XAML.
вы можете применить это свойство напрямую в TextBox :
<TextBox Text="{Binding MyText}" FocusManager.FocusedElement="{Binding RelativeSource={RelativeSource Self}}"/>
Я новичок в использовании WPF и чтении приведенных выше примеров у меня был аналогичный опыт, когда я пытался установить фокус на текстовое поле, используя приведенные примеры кода xaml, т. е. все приведенные выше примеры не работали.
то, что я нашел, я должен был разместить FocusManager.FocusElement в элементе страницы. Я предполагаю, что это, вероятно, будет работать также, если вы использовали окно в качестве родительского элемента. В любом случае, вот код, который работал для меня.
<Page x:Class="NameOfYourClass" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" Title="Title" Height="720" Width="915" Background="white" Loaded="pgLoaded" FocusManager.FocusedElement="{Binding ElementName=NameOfYourTextBox}"> <!-- Create child elements here. --> </Page>
свяжите элемент, на который вы хотите направить фокус, как
FocusManager.FocusedElement= "{Binding ElementName= Comobox1}"
в сетке или groupbox etc
FocusManager не был в intellisense, и это меня немного смутило. Я просто набрал весь атрибут, и это сработало.
FocusManager.FocusedElement= " {Binding ElementName=MyTextBox}"
Microsoft Visual Studio Enterprise 2015 версии 14.0.23107.0 / C# / WPF
для полноты есть также способ обработать это из кода позади (например, в случае элементов управления, которые по какой-либо причине создаются динамически и не существуют в XAML). Прикрепите обработчик к загруженному событию окна, а затем используйте ".Фокус()" метод управления, который вы хотите. Голые кости пример ниже.
public class MyWindow { private VisualCollection controls; private TextBox textBox; // constructor public MyWindow() { controls = new VisualCollection(this); textBox = new TextBox(); controls.Add(textBox); Loaded += window_Loaded; } private void window_Loaded(object sender, RoutedEventArgs e) { textBox.Focus(); } }