Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 选择GotFocus事件中文本框的所有内容_.net_Wpf_Textbox_Wpf Controls_Focus - Fatal编程技术网

.net 选择GotFocus事件中文本框的所有内容

.net 选择GotFocus事件中文本框的所有内容,.net,wpf,textbox,wpf-controls,focus,.net,Wpf,Textbox,Wpf Controls,Focus,我正在开发WPF应用程序,其中有一些显示美元金额的文本框。只要焦点出现在文本框上,我只想选择文本框内的所有内容 为了达到同样的效果,我在“GotFocus”事件中使用了文本框的SelectAll方法,但它并没有达到预期效果 请让我知道我如何才能得到功能。谢谢您是否尝试过处理FocusableChanged事件 您可以在FocusableChanged事件处理程序中检查IsFocused。如果IsFocused为true,则可以调用SelectAll 下面是伪代码 textBox.Focusab

我正在开发WPF应用程序,其中有一些显示美元金额的文本框。只要焦点出现在文本框上,我只想选择文本框内的所有内容

为了达到同样的效果,我在“GotFocus”事件中使用了文本框的SelectAll方法,但它并没有达到预期效果


请让我知道我如何才能得到功能。谢谢

您是否尝试过处理FocusableChanged事件

您可以在FocusableChanged事件处理程序中检查IsFocused。如果IsFocused为true,则可以调用SelectAll 下面是伪代码

textBox.FocusableChanged += (s,e) =>
{
   if(textBox.IsFocused)
     testBox.SelectAll();
}
编辑1 由于上述操作不起作用,您可以尝试FocusManger.GetFocusedElement。


//注意,textBox.SelectAll可能需要在

上调用。您可以为此创建附加行为,并将其用于所需的textBox。这里详细解释了这种方法-

此类行为的代码也可用&

如果您希望应用程序中的所有文本框在默认情况下都具有此功能,请查看此处-


启动时,为textbox注册全局事件处理程序 e、 g

TextBoxBaseGotFocus方法如下:

    private static void TextBoxBaseGotFocus(object sender, RoutedEventArgs e)
{
     // Get the TextBoxBase
     var elem = sender as System.Windows.Controls.Primitives.TextBoxBase;
     if (elem != null)
     {
         elem.SelectAll();
     }
}

我尝试了上述方法,但在代码隐藏文件中附加的事件不会触发。如果这不起作用,丑陋的方法是使用FocusManager.GetFocusedElement和timer事件,因为focusmanageries中没有事件,这是使用FocusManager.GetFocusedElement的非常昂贵的方法,因为它需要线程。我可以使用文本框的样式绑定事件GotKeyBoardFocus和MouseCapture吗?谢谢Tilak,它对我有用。我使用样式中的EventSetter来附加GotKeyBoardFocus和MouseCapture事件的处理程序。谢谢
 EventManager.RegisterClassHandler(typeof(System.Windows.Controls.Primitives.TextBoxBase), UIElement.GotFocusEvent, new RoutedEventHandler(TextBoxBaseGotFocus));
    private static void TextBoxBaseGotFocus(object sender, RoutedEventArgs e)
{
     // Get the TextBoxBase
     var elem = sender as System.Windows.Controls.Primitives.TextBoxBase;
     if (elem != null)
     {
         elem.SelectAll();
     }
}