ListView может получить фокус только при нажатии на элементы списка. При нажатии на пустую область, которая также является частью списка, фокус не может быть получен.
Пример:
<Grid>
<ListView x:Name="lv"
GotFocus="Lv_OnGotFocus"
LostFocus="Lv_OnLostFocus"
MouseEnter="Lv_OnMouseEnter">
<ListViewItem>Foo</ListViewItem>
<ListViewItem>Bar</ListViewItem>
</ListView>
</Grid>
В приведенном выше коде я привязываю обработчик событий к представлению списка, а не к элементу списка.
- Когда курсор перемещается в пустую область, запускается обработчик Lv_OnMouseEnter , который указывает, что пустая область также является частью списка.
- При щелчке в пустой области Lv_OnGotFocus не срабатывает. Фокус не получен.
- При нажатии на любой элемент списка, срабатывает Lv_OnGotFocus . Фокус получил.
- Это даже ЖЕ, когда обработчик Lv_OnGotFocus был перемещен в ауттер Сетка .
Как получить фокус при любом щелкается часть списка?
ПОЧЕМУ мне нужно сосредоточиться на пустой области?
Я реализую функцию копирования и вставки файлов в представлении списка, в котором элементы списка связываются с файлами на диск. Действие вставки запускается обработчиком PreviewKeyDown , прикрепленным к просмотру списка, в котором проверяется нажатие клавиши Ctrl + V .
Если папка пуста, просмотр списка опорожнить. Таким образом, обработчик PreviewKeyDown не может быть запущен, так как обработчик Lv_OnGotFocus в пустой папке, тогда как копирование файла в пустую папку должно работать.