将焦点设置在xaml wpf中的文本框中
尽pipe在这个论坛和其他人的一些post,我找不到一些告诉我如何设置一个TextBox
的焦点。
我有一个userControl与许多标签和文本框。 当表单被加载时,我想要一个特定的文本框有焦点。
我已经设置了tabIndex,但似乎没有工作。
有什么build议么?
您可以使用FocusManager.FocusedElement
附加属性来实现此目的。 下面是一段默认设置焦点到TxtB的代码。
<StackPanel Orientation="Vertical" FocusManager.FocusedElement="{Binding ElementName=TxtB}"> <TextBox x:Name="TxtA" Text="A" /> <TextBox x:Name="TxtB" Text="B" /> </StackPanel>
如果您不想在XAML中执行此操作,也可以在代码隐藏中使用TxtB.Focus()
。
您可以直接在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}"
在网格或组框等
FocusManager不是智慧型的,这使我困惑了一下。 我只是键入整个属性,它的工作。
FocusManager.FocusedElement =“{Binding ElementName = MyTextBox}”
Microsoft Visual Studio Enterprise 2015版本14.0.23107.0/C#/WPF
为了完整性,还有一种方法可以从后面的代码中处理这个问题(例如,无论出于何种原因,都是dynamic创build的并且不存在于XAML中的控件)。 将一个处理程序附加到窗口的Loaded事件,然后使用所需控件的“.Focus()”方法。 下面是裸骨的例子。
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(); } }