Мнемонический выбор WPF не ведет себя как мнемонический выбор WinForms - PullRequest
0 голосов
/ 31 августа 2010

Я поддерживаю гибридное приложение, содержащее технологии WinForms и WPF. В идеале внешний вид должен быть одинаковым между элементами управления WPF и элементами управления WinForms.

Вот разница: в WinForms, если вы выбираете текстовое поле с мнемоническим ключом, все содержимое текстового поля выбирается автоматически. Это хорошее поведение: если вы хотите заменить текст, вы просто нажимаете клавиши меню и начинаете печатать.

В WPF, если вы выберете текстовое поле с мнемонической клавишей, курсор появится в начале текста. Почему кто-то хочет, чтобы курсор был в начале? Как часто люди хотят подготовиться к тексту?

Кто-нибудь знает, есть ли простой способ изменить поведение текстового поля WPF, чтобы активировать текстовое поле с мнемоникой, чтобы выделить весь текст? Однако при активировании текстового поля с помощью кнопки мыши курсор должен находиться там, где вы щелкнули мышью.

1 Ответ

1 голос
/ 31 августа 2010

Я не знаю, является ли это "простым" или нет ... создайте обработчик событий, который выделит весь текст в TextBox:

public void OnGotKeyboardFocus( Object sender, EventArgs e)
{
    TextBox text = sender as TextBox;
    if( text == null)
        return;
    text.SelectAll();
}

, а затем создайте глобальный стильприменяется ко всем текстовым полям.У меня это есть в моем 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...