如何专注于文本框而不会失去其价值

nik*_*mus 1 c# wpf

我试图操纵一个,TextBox以便您可以单击它或选项卡,并且您可以专注于更改值而无需退格以删除现有值.以下代码可以正常工作,但如果用户不想更改该值并恰好通过控件进行制表,则该值将丢失.有没有一个简单的方法可以做到这一点,而无需跟踪当前和以前的变量值?

以下是为用户提供焦点的代码,但会消除现有值:

private void txt_foo_GotFocus(object sender, RoutedEventArgs e)
{
    TextBox tb = (TextBox)sender;
    tb.Text = string.Empty;
    tb.GotFocus -= txt_panelWidth_GotFocus;
}
Run Code Online (Sandbox Code Playgroud)

gre*_*k40 5

我的解决方案:选择文字

void SelectingTextBox_GotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
    var tb = sender as TextBox;
    if (tb != null && e.KeyboardDevice.IsKeyDown(Key.Tab))
    {
        tb.SelectAll();
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,此e.KeyboardDevice.IsKeyDown(Key.Tab)条件是我在项目中使用的条件,以便仅在按选项卡导航时选择所有文本.如果您始终要选择所有文本,则可以删除该条件.但是,当选择所有文本时,使用鼠标的用户可能会非常讨厌.