WPF助记符选择的行为与WinForms助记符选择不同

时间:2010-08-31 05:12:52

标签: wpf winforms

我正在维护一个包含WinForms和WPF技术的混合应用程序。理想情况下,WPF控件和WinForms控件之间的外观应该相同。

区别在于:在WinForms中,如果选择带有助记键的文本框,则会自动选择文本框的全部内容。这是一个很好的行为:如果你想替换文本,只需按下menmonic键并开始输入。

在WPF中,如果选择带有助记键的文本框,则光标将显示在文本的BEGINNING处。为什么有人希望光标在开头?人们常常想要预习文本吗?

有没有人知道是否有一种简单的方法可以改变WPF文本框的行为,因此激活带有助记符的文本框会选择整个文本?但是,使用鼠标按钮激活文本框应将光标放在您单击鼠标的任何位置。

1 个答案:

答案 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>