2011-11-28 99 views
0

我从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仍然处于启用状态(至少风格不会变回)

回答

1

同时,我自己找到了解决方案。可能对别人很有趣:

由于我一直在与IsEnabled杂耍,并将焦点设置为输入字段,我认为可能有一些问题的顺序触发器,样式和函数调用类我的控制。无论如何,我已经解决它以下列方式:

我删除了这三个制定者

<MultiTrigger.Setters> 
    <Setter Property="Tag" TargetName="ParameterDownButton" Value="Enabled"/> 
    <Setter Property="Tag" TargetName="ParameterUpButton" Value="Enabled"/> 
    <Setter Property="Tag" TargetName="ParameterValueTextBox" Value="Enabled"/> 
</MultiTrigger.Setters> 

并启用按钮,所有的时间。在将样式触发器应用于Tag属性后,所有内容看起来都是相同的,并且完美地工作。可能还有其他问题需要关注禁用的元素(取决于调用者本身的设置器,样式和代码的顺序)。