TextBox
WPFの要素にフォーカスを設定する方法
私はこのコードを持っています:
txtCompanyID.Focusable = true;
txtCompanyID.Focus();
...しかし、機能していません。
何か案が?
TextBox
WPFの要素にフォーカスを設定する方法
私はこのコードを持っています:
txtCompanyID.Focusable = true;
txtCompanyID.Focus();
...しかし、機能していません。
何か案が?
回答:
XAMLの場合:
<StackPanel FocusManager.FocusedElement="{Binding ElementName=Box}">
<TextBox Name="Box" />
</StackPanel>
これまでのところ、問題のコードが機能しない理由は誰も説明していません。私の推測では、コードはWindowのコンストラクターに配置されていました。しかし、現時点では、フォーカスを設定するのは時期尚早です。ウィンドウが相互作用する準備ができたら、それを実行する必要があります。コードの最適な場所はLoadedイベントです。
public KonsoleWindow() {
public TestWindow() {
InitializeComponent();
Loaded += TestWindow_Loaded;
}
private void TestWindow_Loaded(object sender, RoutedEventArgs e) {
txtCompanyID.Focus();
}
}
Focus()
、フォーカス状態パラメーターが必要です-例txtCompanyId.Focus(FocusState.Keyboard)
FocusManager.SetFocusedElementを試してください
FocusManager.SetFocusedElement(parentElement, txtCompanyID)
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();
}), System.Windows.Threading.DispatcherPriority.Render);
私が理解しているところによるとFocus()
、アプリケーションが他のコンポーネントをレンダリングする前にへの呼び出しが呼び出されるため、他のソリューションは機能しない可能性があります。
別の可能な解決策は、無料のDevExpress MVVMフレームワークによって提供されるFocusBehaviorを使用することです。
<TextBox Text="This control is focused on startup">
<dxmvvm:Interaction.Behaviors>
<dxmvvm:FocusBehavior/>
</dxmvvm:Interaction.Behaviors>
</TextBox>
これにより、ロードされたとき、特定のイベントが発生したとき、またはプロパティが変更されたときに、コントロールをフォーカスできます。
コードビハインドでは、これを行うだけでそれを実現できます。
private void Window_Loaded(object sender, RoutedEventArgs e)
{
txtIndex.Focusable = true;
txtIndex.Focus();
}
注:ウィンドウが読み込まれるまで機能しません