このフォーラムへのいくつかの投稿や他の投稿にもかかわらず、TextBox
にフォーカスを設定する方法を教えてくれるものが見つかりません。
多くのラベルとtextBoxを持つuserControlがあります。フォームが読み込まれると、特定のtextBoxにフォーカスを設定します。
TabIndexを設定しましたが、うまくいかないようです。
助言がありますか?
この目的で_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を配置しなければならなかったことです。 Windowを親要素として使用した場合、これもおそらく機能すると思われます。とにかく、ここに私のために働いたコードがあります。
<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>
実験から、xamlソリューション
FocusManager.FocusedElement="{Binding ElementName=yourElement}"
ウィンドウ階層の最上位の要素(通常はウィンドウ、または他のすべてを配置するグリッド)に配置すると、最もうまく機能するようです。
フォーカスを向ける要素を次のようにバインドします
FocusManager.FocusedElement= "{Binding ElementName= Comobox1}"
グリッドまたはグループボックスなど
FocusManagerはインテリセンスではないため、少し混乱しました。属性全体を入力するだけで機能しました。
FocusManager.FocusedElement = "{Binding ElementName = MyTextBox}"
Microsoft Visual Studio Enterprise 2015バージョン14.0.23107.0/C#/WPF
完全を期すために、コードビハインドからこれを処理する方法もあります(たとえば、何らかの理由で動的に作成され、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();
}
}
私の場合、提供された回答は機能しませんでした。 InitializeComponent();
の後のコードのどこか
追加しなければならなかった
MyTextBox.Focus();
そしてそれは動作します。