#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 и определить, была ли мышь по-прежнему пользовательским элементом управления, но отказался от этого маршрута, когда мне пришлось постоянно отслеживать местоположение мыши).