web-dev-qa-db-ja.com

xaml wpfでテキストボックスにフォーカスを設定します

このフォーラムへのいくつかの投稿や他の投稿にもかかわらず、TextBoxにフォーカスを設定する方法を教えてくれるものが見つかりません。

多くのラベルとtextBoxを持つuserControlがあります。フォームが読み込まれると、特定のtextBoxにフォーカスを設定します。

TabIndexを設定しましたが、うまくいかないようです。

助言がありますか?

89
user9969

この目的で_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()を使用することもできます。

172

このプロパティをTextBoxに直接適用できます。

<TextBox Text="{Binding MyText}" FocusManager.FocusedElement="{Binding RelativeSource={RelativeSource Self}}"/>
27
Max

私は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>
6
Joseph Mawer

実験から、xamlソリューション

FocusManager.FocusedElement="{Binding ElementName=yourElement}"

ウィンドウ階層の最上位の要素(通常はウィンドウ、または他のすべてを配置するグリッド)に配置すると、最もうまく機能するようです。

0
Tan Jing Yuan

フォーカスを向ける要素を次のようにバインドします

FocusManager.FocusedElement= "{Binding ElementName= Comobox1}"

グリッドまたはグループボックスなど

0
Sufian Bashir

FocusManagerはインテリセンスではないため、少し混乱しました。属性全体を入力するだけで機能しました。

FocusManager.FocusedElement = "{Binding ElementName = MyTextBox}"


Microsoft Visual Studio Enterprise 2015バージョン14.0.23107.0/C#/WPF

0
icernos

完全を期すために、コードビハインドからこれを処理する方法もあります(たとえば、何らかの理由で動的に作成され、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();
    }
}
0
Robert N

私の場合、提供された回答は機能しませんでした。 InitializeComponent();の後のコードのどこか

追加しなければならなかった

MyTextBox.Focus();そしてそれは動作します。

0
nPcomp