WPFのTextBox
要素にフォーカスを設定する方法
私はこのコードを持っています:
txtCompanyID.Focusable = true;
txtCompanyID.Focus();
...しかし、それは機能していません。
何か案が?
XAMLの場合:
<StackPanel FocusManager.FocusedElement="{Binding ElementName=Box}">
<TextBox Name="Box" />
</StackPanel>
try FocusManager.SetFocusedElement
FocusManager.SetFocusedElement(parentElement, txtCompanyID)
これまでのところ、質問のコードが機能しない理由については説明していません。私の推測では、コードはWindowのコンストラクターに配置されました。しかし、現時点では焦点を合わせるのは時期尚早です。ウィンドウがインタラクションの準備ができたら、それを行う必要があります。コードの最適な場所はLoadedイベントです。
public KonsoleWindow() {
public TestWindow() {
InitializeComponent();
Loaded += TestWindow_Loaded;
}
private void TestWindow_Loaded(object sender, RoutedEventArgs e) {
txtCompanyID.Focus();
}
}
txtCompanyID.Focusable = true;
Keyboard.Focus(txtCompanyID);
msdn:
デスクトップ全体でキーボードフォーカスを持つ要素は1つだけです。 WPFでは、キーボードフォーカスを持つ要素のIsKeyboardFocusedはtrueに設定されます。
設定行の後に改行して、IsKeyboardFocused
プロパティの値を確認できます。また、実際にその行に到達したかどうか、またはその後、他の要素を設定してフォーカスを取得するかどうかも確認します。
これを試してください:MyTextBox.Focus ( );
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}" />
他の回答で解決策が見つからない場合は、それが問題の解決方法です。
Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
TEXTBOX_OBJECT.Focus();
}), DispatcherPriority.Render);
私が理解していることから、アプリケーションが他のコンポーネントをレンダリングする前にFocus()
の呼び出しが呼び出されるため、他のソリューションが機能しない場合があります。
別の可能な解決策は、 FocusBehavior によって提供される 無料のDevExpress MVVM Framework を使用することです。
<TextBox Text="This control is focused on startup">
<dxmvvm:Interaction.Behaviors>
<dxmvvm:FocusBehavior/>
</dxmvvm:Interaction.Behaviors>
</TextBox>
これにより、コントロールがロードされたとき、特定のイベントが発生したとき、またはプロパティが変更されたときに、コントロールにフォーカスすることができます。