web-dev-qa-db-ja.com

WPFでテキストボックスにフォーカスを設定する

WPFのTextBox要素にフォーカスを設定する方法

私はこのコードを持っています:

txtCompanyID.Focusable = true;
txtCompanyID.Focus();

...しかし、それは機能していません。

何か案が?

96
priyanka.sarkar

XAMLの場合:

<StackPanel FocusManager.FocusedElement="{Binding ElementName=Box}">
   <TextBox Name="Box" />
</StackPanel>
131
usefulBee

try FocusManager.SetFocusedElement

FocusManager.SetFocusedElement(parentElement, txtCompanyID)
49
Arsen Mkrtchyan

これまでのところ、質問のコードが機能しない理由については説明していません。私の推測では、コードはWindowのコンストラクターに配置されました。しかし、現時点では焦点を合わせるのは時期尚早です。ウィンドウがインタラクションの準備ができたら、それを行う必要があります。コードの最適な場所はLoadedイベントです。

public KonsoleWindow() {
  public TestWindow() {
    InitializeComponent();
    Loaded += TestWindow_Loaded;
  }

  private void TestWindow_Loaded(object sender, RoutedEventArgs e) {
    txtCompanyID.Focus();
  }
}
48
Peter Huber
txtCompanyID.Focusable = true;
Keyboard.Focus(txtCompanyID);

msdn:

デスクトップ全体でキーボードフォーカスを持つ要素は1つだけです。 WPFでは、キーボードフォーカスを持つ要素のIsKeyboardFocusedはtrueに設定されます。

設定行の後に改行して、IsKeyboardFocusedプロパティの値を確認できます。また、実際にその行に到達したかどうか、またはその後、他の要素を設定してフォーカスを取得するかどうかも確認します。

22

これを試してください:MyTextBox.Focus ( );

16
NazOok

StackPanelではなくグリッドを使用していたので、これはうまくいきませんでした。

私はついにこの例を見つけました: http://spin.atomicobject.com/2013/03/06/xaml-wpf-textbox-focus/

これを次のように変更しました。

「リソース」セクション:

    <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>

私のグリッド定義では:

<Grid Style="{StaticResource FocusTextBox}" />
12
Anya Hope

他の回答で解決策が見つからない場合は、それが問題の解決方法です。

Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
  TEXTBOX_OBJECT.Focus();
}), DispatcherPriority.Render);

私が理解していることから、アプリケーションが他のコンポーネントをレンダリングする前にFocus()の呼び出しが呼び出されるため、他のソリューションが機能しない場合があります。

1
EasyJoin Dev

別の可能な解決策は、 FocusBehavior によって提供される 無料のDevExpress MVVM Framework を使用することです。

<TextBox Text="This control is focused on startup">
    <dxmvvm:Interaction.Behaviors>
        <dxmvvm:FocusBehavior/>
    </dxmvvm:Interaction.Behaviors>
</TextBox>

これにより、コントロールがロードされたとき、特定のイベントが発生したとき、またはプロパティが変更されたときに、コントロールにフォーカスすることができます。

0
Alex Russkov