WPF, какие элементы управления будут обрабатывать событие MouseLeftButtonDown?

У меня есть DataGridControl, и DataTemplate его ячейки перезаписывается в TextBoxs, щелкая за пределами ячеек, но все еще в DataGrid, я хочу, чтобы TextBox потерял фокус клавиатуры, чтобы он мог зафиксировать изменения, но кажется, что DataGrid не будет обрабатывать Событие MouseLeftButtonDown, поэтому мне нужно вручную добавить обработчик в Grid и в обработчик:

        e.Handled = true;
        Keyboard.Focus( sender as UIElement );

сделать родительскую панель "фокусируемой".

Используя Snoop, я замечаю, что элементы управления, такие как TextBox и Button, способны обрабатывать событие MosueLeftButtonDown, а панели - нет, если для свойства "Focusable" установлено значение "True". Кто-нибудь знает причину этого, спасибо.

Чтобы упростить ситуацию: предположим, у нас есть TextBox и кнопка на сетке:

<Grid Background="AliceBlue">
    <TextBox Height="25" Margin="50" Text="abcd"/>
    <Button  Height="25" Margin="50,100,50,0"></Button>
</Grid>

когда я нажимаю на TextBox, он получает фокус KeyBoard, когда я щелкаю пустую область сетки, я хочу, чтобы TextBox терял фокус, проблема в том, что сетка не фокусируется по сравнению с TextBoxes и кнопками.

1 ответ

Документация для Panel показывает, что Panel может обрабатывать события мыши:

https://msdn.microsoft.com/en-us/library/system.windows.controls.panel_events(v=vs.110).aspx

Другие вопросы по тегам