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