小さな DataForm があり、最初の TextBox にフォーカスを設定したいと考えています。2009 年 11 月のツールキットを使用しています。TextBox に名前を付け、DataForm のロード済みイベントから .Focus() を使用してみました。カーソルが「点滅」するだけでフォーカスが移動し、その後消えてしまいます。これがDataFormのアーティファクトなのか、それとも何か他のものなのかを調べようとしています。私がこれを行うことができるかどうか誰かが知っていますか?
1917 次
3 に答える
1
私が成功したちょっとしたトリックは、テキスト ボックスの Loaded イベントをサブスクライブすることです。次に、イベント ハンドラーで、次のようなコードでフォーカスを設定します。
private void TextBox_Loaded(object sender, RoutedEventArgs e)
{
TextBox usernameBox = (TextBox)sender;
Dispatcher.BeginInvoke(() => { usernameBox.Focus(); });
}
于 2010-12-21T14:22:39.820 に答える
1
Dispatcher、UpdateLayoutなどを使用してさまざまなインターネットサイトに出回っているなど、たくさんの提案を試しましたが、どれも確実に機能しませんでした。最終的に、私は次のことに落ち着きました。
プライベート bool _firstTime = true;
private void MyChildWindow_GotFocus(object sender, RoutedEventArgs e)
{
if (_firstTime)
{
try
{
var dataForm = MyDataForm;
var defaultFocus = dataForm.FindNameInContent("Description") as TextBox;
defaultFocus.Focus();
}
catch (Exception)
{
}
finally
{
_firstTime = false;
}
}
}
きれいではありません...しかし、うまくいきます。SL4 で Focus() メソッドを使用すると、タイミングの問題があるようです。
于 2011-01-24T13:55:22.770 に答える
0
カスタム フォーカス設定関数 (FocusEx) を呼び出してみてください。
internal static class ControlExt
{
// Extension for Control
internal static bool FocusEx(this Control control)
{
if (control == null)
return false;
bool success = false;
if (control == FocusManager.GetFocusedElement())
success = true;
else
{
// To get Focus() to work properly, call UpdateLayout() immediately before
control.UpdateLayout();
success = control.Focus();
}
ListBox listBox = control as ListBox;
if (listBox != null)
{
if (listBox.SelectedIndex < 0 && listBox.Items.Count > 0)
listBox.SelectedIndex = 0;
}
return success;
}
}
それはあなたのために働くはずです。
ジム・マッカーディ
于 2010-01-12T23:24:58.757 に答える