我从Control中继承了一个CustomControl。它包含了2个标签,1个TextBox和2个按钮(simplyfied视图)如何重定向自定义控件中的焦点
<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>
随着用户应该能够通过一些定制控件的浏览,我想通过我的控制Tab键将焦点重定向。简单地说:
我想浏览所有这些文本框,只有那些(按钮应该没有制表符停止!)。
默认情况下,按钮和文本框是禁用的,模板有一些触发器可以通过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 -->
感谢您的帮助!
编辑:
protected override void OnGotFocus(RoutedEventArgs e)
{
var tb = ((TextBox) Template.FindName("ParameterValueTextBox", this));
tb.IsEnabled = true;
tb.Focus();
}
我也写了一个触发了我的控制:我通过重写控制的OnGotFocus事件这样试过
<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仍然处于启用状态(至少风格不会变回)