2015-03-18 3 views
0

У меня есть окно, содержащее сетку, которая содержит еще одну сетку с InputBindings (клавишами Enter и Delete), а среди других элементов управления - DataGrid только для чтения.Как предотвратить DataGrid от получения фокуса клавиатуры?

Когда объект DataGrid имеет фокус, InputBindings останавливают запуск своих команд. Затем я вынужден вручную переключить внимание на другой элемент управления до того, как InputBindings сможет работать.

Как можно обойти это поведение? Я пробовал играть почти с каждым свойством DataGrid, связанным с вводом/подключением клавиатуры, без успеха.

Вот XAML, даже если это не приносит много к столу:

<Grid> 
    <Grid.InputBindings> 
     <KeyBinding Key="Enter" Command="{Binding DoStuff}"/> 
     <KeyBinding Key="Delete" Command="{Binding UndoStuff}"/> 
    </Grid.InputBindings> 
    <!-- stuff... --> 
    <Grid > 
     <!-- more stuff... --> 
     <DataGrid IsReadOnly="True" ItemsSource="{Binding SomeProperty}" SelectedItem="{Binding SomeSelectedProperty, Mode=TwoWay}"> 
      <DataGrid.Columns> 
       <!-- blah --> 
      </DataGrid.Columns> 
     </DataGrid> 
    </Grid> 
</Grid> 
+0

Как насчет установки свойства IsEnabled? –

+0

@Mike Nah, это было бы слишком легко. : p Причина в том, что мне все еще нужно иметь возможность выбирать строку в datagrid, потому что команда UndoStuff удаляет ее. – Kilazur

ответ

0

вы можете справиться PreviewGotKeyboardFocus событие.

<DataGrid Name="grid" PreviewGotKeyboardFocus="grid_PreviewGotKeyboardFocus" 

private void grid_PreviewGotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) 
    { 
     e.Handled = true; 
    } 
+2

Это всегда чрезвычайное решение, но я действительно надеялся, что будет чистое решение XAML, и, следовательно, отсутствие тега C# в моем вопросе. – Kilazur