2011-11-28 107 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屬性後,所有內容看起來都是相同的,並且完美地工作。可能還有其他問題需要關注禁用的元素(取決於調用者本身的設置器,樣式和代碼的順序)。

相關問題