2012-03-28 53 views
0

我正在開發一個使用標準ComboBox的瀏覽器應用程序的Silverlight 4,我需要按選項卡鍵兩次才能移過控件。數據輸入表單中的其他控件(TextBox,RadioButton等)都正常運行,即只需要一個選項卡。選項卡兩次以移動Silverlight組合框

我創建了一個簡單的示例應用程序,發現ComboBox的行爲正確,所以導致問題的真實應用程序有些特別。我懷疑問題是由於我使用AccentColor Theme。我在這些主題方面遇到了很多問題,並且認識到它們應該被視爲可能的樣本。他們的質量不足以用於生產應用程序,正如Introducing the new Silverlight 4 themes博客文章所示。

我在問這個問題,以便我自己可以回答它以捕獲解決方案以供將來參考。

+0

剛剛發現一個重複的問題http://stackoverflow.com/questions/4061821/ silverlight-button-control-tab-stop-twice-mystery,所以這應該可能被刪除。 – 2012-03-28 03:55:16

+0

在付出更多注意力之後,這個其他問題是關於一個Button而不是一個ComboBox,所以也許它不應該被認爲是重複的,即使問題的根源(自定義隱式樣式)是相同的。 – 2012-03-28 05:18:13

回答

2

AccentColor Theme爲組合框,其包括設置模板屬性創建一個implicit Style。此模板使用帶有自定義樣式的ToggleButton,由於某種原因(樣式?)ContentPresenter包含在ContentControl之內,默認IsTabStop屬性爲true。將此屬性明確設置爲false可恢復單個選項卡在控件上移動的直觀行爲。

<ContentControl VerticalAlignment="Center" IsTabStop="False"> 
    <ContentControl.Foreground> 
    <SolidColorBrush x:Name="ContentPresenterWrapperColor" Color="{StaticResource BaseColor1}" /> 
    </ContentControl.Foreground> 
    <ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
</ContentControl> 

標準的ComboBox模板不包括此ContentControl這解釋了行爲的差異。我對AccentColor主題不熟悉,不知道是否最好全部刪除ContentControl,或者如果它是自定義視覺樣式所必需的。

FYI Silverlight Spy是在行爲追查問題有很大的幫助,哪怕是一個有點貴,恕我直言:-)