我正在维护一个包含WinForms和WPF技术的混合应用程序。理想情况下,WPF控件和WinForms控件之间的外观应该相同。
区别在于:在WinForms中,如果选择带有助记键的文本框,则会自动选择文本框的全部内容。这是一个很好的行为:如果你想替换文本,只需按下menmonic键并开始输入。
在WPF中,如果选择带有助记键的文本框,则光标将显示在文本的BEGINNING处。为什么有人希望光标在开头?人们常常想要预习文本吗?
有没有人知道是否有一种简单的方法可以改变WPF文本框的行为,因此激活带有助记符的文本框会选择整个文本?但是,使用鼠标按钮激活文本框应将光标放在您单击鼠标的任何位置。
答案 0 :(得分:1)
我不知道这是否“简单”...创建一个事件处理程序,它将选择TextBox中的所有文本:
public void OnGotKeyboardFocus( Object sender, EventArgs e)
{
TextBox text = sender as TextBox;
if( text == null)
return;
text.SelectAll();
}
然后创建一个全局适用于所有TextBox的样式。我在我的Windows.Resources中有它,但我认为你可以把它放在App.Resources中。
<Window x:Class="TextBoxSelectAll.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<Style x:Key="{x:Type TextBox}" TargetType="{x:Type TextBox}">
<EventSetter Event="GotKeyboardFocus" Handler="OnGotKeyboardFocus" />
</Style>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBox Grid.Row="0"></TextBox>
<TextBox Grid.Row="1"></TextBox>
</Grid>
</Window>