Изменить выделение в ComboBoxEditSettings внутри сетки с помощью KeyUp/Down

Я работаю с ComboBox внутри сетки, используя ComboBoxEditSeting, и я хочу иметь возможность открывать вкладку в элементе управления, если пользователь нажимает KeyDown/KeyUp, раскрывает список параметров, и пользователь может перемещаться между ними. Я знаю, что на данный момент это возможно, если я нажму Ctrl+KeyUp/Down, но я хочу без комбинации с контролем. Как этого добиться?

Вот пик кода, который у меня есть до сих пор:

<dxg:GridColumn FieldName="{x:Static model:PromptFieldNames.WFieldName}" Header="{x:Static p:Resources.SubmitTo}" HorizontalHeaderContentAlignment="Left" MinWidth="100"  Width="250">
    <dxg:GridColumn.EditSettings>
        <dxe:ComboBoxEditSettings ItemsSource="{Binding DataContext.Ws, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"
                                  ValueMember="Id" IsTextEditable="False"
                                  DisplayMember="Name" ImmediatePopup="True" />
    </dxg:GridColumn.EditSettings>
</dxg:GridColumn>

person morochaamorocha    schedule 25.02.2016    source источник


Ответы (1)


Ключевые события обрабатываются на уровне сетки, поэтому вам необходимо создать потомок класса GridControl и переопределить его метод OnPreviewKeyDown:

            public class MyGridControl : GridControl
            {
                protected override void OnPreviewKeyDown(KeyEventArgs e)
                {
                    if (!(View.ActiveEditor is ComboBoxEdit))
                    {
                        base.OnPreviewKeyDown(e);
                        return;
                    }

                    if (e.Key == Key.Down)
                        ((ComboBoxEdit)View.ActiveEditor).SpinDown();

                    if (e.Key == Key.Up)
                        ((ComboBoxEdit)View.ActiveEditor).SpinUp();

                    e.Handled = true;
                }
            }

Но вы должны активировать редактор клавишей F2 или кликом по ячейке.

person Mikhail Shubin    schedule 02.03.2016