WPF: ListView не может получить фокус при щелчке в пустой области - PullRequest
0 голосов
/ 20 апреля 2020

ListView может получить фокус только при нажатии на элементы списка. При нажатии на пустую область, которая также является частью списка, фокус не может быть получен.

Пример:

      <Grid>
            <ListView x:Name="lv" 
                      GotFocus="Lv_OnGotFocus"
                      LostFocus="Lv_OnLostFocus"
                      MouseEnter="Lv_OnMouseEnter">
                <ListViewItem>Foo</ListViewItem>
                <ListViewItem>Bar</ListViewItem>
            </ListView>
        </Grid>

Mouse Move In Area

В приведенном выше коде я привязываю обработчик событий к представлению списка, а не к элементу списка.

  • Когда курсор перемещается в пустую область, запускается обработчик Lv_OnMouseEnter , который указывает, что пустая область также является частью списка.
  • При щелчке в пустой области Lv_OnGotFocus не срабатывает. Фокус не получен.
  • При нажатии на любой элемент списка, срабатывает Lv_OnGotFocus . Фокус получил.
  • Это даже ЖЕ, когда обработчик Lv_OnGotFocus был перемещен в ауттер Сетка .

Как получить фокус при любом щелкается часть списка?

ПОЧЕМУ мне нужно сосредоточиться на пустой области?

Я реализую функцию копирования и вставки файлов в представлении списка, в котором элементы списка связываются с файлами на диск. Действие вставки запускается обработчиком PreviewKeyDown , прикрепленным к просмотру списка, в котором проверяется нажатие клавиши Ctrl + V .

Если папка пуста, просмотр списка опорожнить. Таким образом, обработчик PreviewKeyDown не может быть запущен, так как обработчик Lv_OnGotFocus в пустой папке, тогда как копирование файла в пустую папку должно работать.

1 Ответ

0 голосов
/ 20 апреля 2020

Обходной путь - обработать щелчки:

<ListView PreviewMouseLeftButtonDown="ListView_PreviewMouseLeftButtonDown" ... />

для установки фокуса

void ListView_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) =>
    (sender as ListBox)?.Focus();

Примечание: это вызовет двойной вызов GotFocus при нажатии на обычные элементы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...