Сохранить фокус в текстовом поле при нажатии на окружающие элементы

#c# #silverlight

#c# #silverlight

Вопрос:

У меня есть небольшой пользовательский элемент управления, который содержит некоторую разметку Xaml, которая включает текстовое поле. Когда элемент управления выбран, я автоматически устанавливаю фокус на текстовое поле. Однако, когда пользователь нажимает на любой другой элемент (например, границу), фокус удаляется из текстового поля.

Например,

 <Grid>
  <Grid.RowDefinitions>
    <RowDefinition Height="Auto" />
    <RowDefinition Height="Auto" />
    <RowDefinition Height="Auto" />
  </Grid.RowDefinitions>

  <Rectangle Grid.Row="0" Fill="Blue" IsHitTestVisible="False" />
  <TextBox Grid.Row="1" />
  <TextBlock Grid.Row="2" Text="Something" IsHitTestVisible="False" />
</Grid>
  

Щелчок по прямоугольнику или текстовому блоку приводит к потере фокуса текстового поля.

Каков наилучший способ сохранить фокус на текстовом блоке? Я чувствую, что мне не хватает чего-то простого.

Комментарии:

1. Возможно, вы могли бы обработать событие LostFocus и вызвать Focus, когда это произойдет? Вы пытаетесь создать текстовое поле пользовательского вида? Вам следует заглянуть в Шаблоны и стили, если это так.

Ответ №1:

Щелчок, вероятно, проходит через сетку и фокусируется на том, что находится под ней.

Попробуйте установить Background =»Прозрачный» на <Grid>

Ответ №2:

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

Я не был доволен решением, но не мог придумать ничего другого.

(Я пытался обработать событие LostFocus и определить, была ли мышь по-прежнему пользовательским элементом управления, но отказался от этого маршрута, когда мне пришлось постоянно отслеживать местоположение мыши).