Определить фокус WPF, достигнув конца области фокусировки - PullRequest
7 голосов
/ 08 июля 2010

В WPF я могу указать, что контейнер элемента управления является областью фокусировки, и что навигация по вкладкам должна циклически перемещаться по элементам управления (т. Е. При выходе из последнего элемента управления фокус возвращается к первому):

<Border FocusManager.IsFocusScope="True" KeyboardNavigation.TabNavigation="Cycle">
<ItemsControl ItemsSource="{Binding}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <TextBox x:Name="Editor" Text="{Binding}" />
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</Border>

Я пытаюсь обнаружить , когда фокус покидает последнее поле.Не зная точно количество элементов управления в фокусе, кто-нибудь знает, возможно ли это?

Ответы [ 2 ]

0 голосов
/ 07 октября 2011

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

ВВ конце я смог обойти свою конкретную проблему, используя представление коллекции по умолчанию, чтобы сохранить запись текущего элемента, и некоторые присоединенные свойства, чтобы сохранить его в соответствии с текущим фокусом клавиатуры

0 голосов
/ 23 марта 2011

Похоже, что эта функция не встроена в WPF.

Я бы порекомендовал создать привязанное поведение, чтобы справиться с этим.

Если у вас есть Blend и вы можете использовать System.Windows.Interactivity, просто наследуйте класс Behavior и переопределяйте OnAttached и OnDetached. В противном случае, напишите класс статического поведения, как показано здесь .

Когда поведение присоединено, сохраните первый (текущий?) Объект с фокусом и подпишитесь на событие с измененным фокусом. В обработчике событий отследите сфокусированный элемент в пределах области фокуса (область, к которой применяется поведение). Когда сфокусированный предмет возвращается к первому предмету, запускается перенаправленное событие. Есть некоторые детали, которые нужно было бы проработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...