Как я могу переместить фокус с заголовка tabitem на контент в WPF? - PullRequest
1 голос
/ 13 сентября 2010

Как я могу переместить фокус с заголовка таблицы на содержимое этой таблицы, нажав клавишу со стрелкой вниз?Я пытался использовать KeyboardNavigation, но при нажатии клавиши «Вверх» или «Вверх» клавиатурный фокус все еще не двигается.

Заранее спасибо.

1 Ответ

1 голос
/ 20 апреля 2011

Я создал прикрепленное свойство для решения аналогичной проблемы.Когда вы нажимаете определенную клавишу на ContentControl (TabItem), он фокусируется на контенте.XAML выглядит следующим образом

<TabControl Focusable="False">
        <TabItem Header="Main" local:Focus.ContentOn="Down">
            <Stackpanel>
               <TextBox />
            </Stackpanel>
        </TabItem>

и присоединенное свойство:

public static class Focus
{
    public static Key GetContentOn(DependencyObject obj)
    {
        return (Key)obj.GetValue(ContentOnProperty);
    }

    public static void SetContentOn(DependencyObject obj, Key value)
    {
        obj.SetValue(ContentOnProperty, value);
    }

    // Using a DependencyProperty as the backing store for ContentOn.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty ContentOnProperty =
        DependencyProperty.RegisterAttached("ContentOn", typeof(Key), typeof(Navigate),
        new FrameworkPropertyMetadata(Key.None, OnContentOnChanged));

    private static void OnContentOnChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
    {
        var control = o as ContentControl;
        if (control != null)
            control.KeyDown += FocusContent;
    }

    private static void FocusContent(object sender, KeyEventArgs e)
    {
        if (Keyboard.FocusedElement == sender)
        {
            var control = sender as ContentControl;
            if (control != null && control.HasContent && GetContentOn(control) == e.Key)
            {
                ((FrameworkElement)control.Content).MoveFocus(new TraversalRequest(FocusNavigationDirection.First));
                e.Handled = true;
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...