我正在研究WPF应用程序,其中我有一些显示金额的文本框。我只想在文本框中出现焦点时选择文本框中的所有内容。
为了达到同样的目的,我在“GotFocus”事件中使用了文本框的SelectAll()方法,但它并不像所希望的那样工作。
请告诉我如何才能正常运作。谢谢
答案 0 :(得分:0)
您是否尝试过处理FocusableChanged事件? http://msdn.microsoft.com/en-us/library/system.windows.uielement.focusablechanged.aspx
您可以在FocusableChanged事件处理程序中检查IsFocused。如果IsFocused为真,您可以调用SelectAll 以下是伪代码
textBox.FocusableChanged += (s,e) =>
{
if(textBox.IsFocused)
testBox.SelectAll();
}
EDIT1
由于Above不起作用,您可以尝试使用FocusManger.GetFocusedElement
determining-the-focused-element
public DebugFocusedElementProxy()
{
var timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromMilliseconds(100);
timer.Tick += (o, ea) =>
{
var fe = FocusManager.GetFocusedElement();
if (fe != null)
{
var element = fe as FrameworkElement;
if (!string.IsNullOrEmpty(element.Name) &&
String.Equals(element.Name, textBox))
{
textBox.SelectAll();
}
}
};
timer.Start();
}
//注意可能需要在Dispatcher Thread
上调用textBox.SelectAll答案 1 :(得分:0)
您可以为此创建附加行为,并将其用于所需的文本框。这个approch在这里详细解释 -
http://eladm.wordpress.com/2009/04/02/attached-behavior/
如果您希望应用程序中的所有文本框默认都具有此功能,请查看此处 -
答案 2 :(得分:0)
启动时,为文本框注册一个全局事件处理程序 e.g
EventManager.RegisterClassHandler(typeof(System.Windows.Controls.Primitives.TextBoxBase), UIElement.GotFocusEvent, new RoutedEventHandler(TextBoxBaseGotFocus));
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();
}
}