Я получил наследование CustomControl от: Control. Он содержит 2 метки, 1 текстовое поле и 2 кнопки (простой вид)
<Button IsTabStop="False" x:Name="ParameterUpButton" IsEnabled="False" Width="14" Height="10">
<Button IsTabStop="False" x:Name="ParameterDownButton" IsEnabled="False" Width="14" Height="10"/>
<StackPanel Orientation="Horizontal" Height="28" VerticalAlignment="Center">
<Label Content="{TemplateBinding ParameterName}" Width="45" />
<TextBox IsEnabled="False" x:Name="ParameterValueTextBox" Text="{TemplateBinding ParameterValue}" Width="36" Height="23"/>
<Label Content="{TemplateBinding ParameterUnit}" Width="33" />
</StackPanel>
Поскольку пользователь должен иметь возможность перемещаться по некоторым из этих пользовательских элементов управления, я хочу перенаправить фокус, переключаясь между своими элементами управления. Просто сказал:
Я хочу перемещаться по всем этим текстовым полям, и только по тем (кнопки не должны быть табуляцией!).
Кнопки и текстовое поле по умолчанию отключены, и шаблон получил несколько триггеров для их включения с помощью IsMouseOver и IsKeyboardFocused (для отображения другого стиля).
Как мне сфокусировать текстовое поле (и включить его, включая две кнопки)
- использовать Tab для навигации по моим элементам управления?
- , нажав на мой элемент управления (независимо от того, где, только внутри элемента управления)
Использование выглядит следующим образом:
<!-- some more controls -->
<CustomControls:ParameterControl ParameterName="foo" ParameterUnit="x" ParameterValue="6" Margin="5"/>
<CustomControls:ParameterControl ParameterName="bar" ParameterUnit="y" ParameterValue="6" Margin="5"/>
<CustomControls:ParameterControl ParameterName="foobar" ParameterUnit="z" ParameterValue="6" Margin="5"/>
<!-- some more controls -->
Заранее спасибо за любую помощь!
Редактировать: Я попробовал это, переопределив событие OnGotFocus элемента управления, как это:
protected override void OnGotFocus(RoutedEventArgs e)
{
var tb = ((TextBox) Template.FindName("ParameterValueTextBox", this));
tb.IsEnabled = true;
tb.Focus();
}
Я также написал триггер для моего элемента управления:
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition SourceName="ParameterValueTextBox" Property="IsKeyboardFocused" Value="true"/>
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter Property="IsEnabled" TargetName="ParameterDownButton" Value="true"/>
<Setter Property="IsEnabled" TargetName="ParameterUpButton" Value="true"/>
<Setter Property="IsEnabled" TargetName="ParameterValueTextBox" Value="true"/>
</MultiTrigger.Setters>
</MultiTrigger>
На самом деле, этот триггер работает для кнопок (я могу видеть, как стиль меняется и возвращается обратно после потери фокуса), но мой TextBox все еще включен (по крайней мере, стиль не меняется обратно)