我從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仍然處於啓用狀態(至少風格不會變回)