【问题标题】:Tab twice to move over Silverlight ComboBoxTab 两次移动到 Silverlight ComboBox
【发布时间】:2012-03-29 06:12:31
【问题描述】:

我正在使用标准的ComboBox 在浏览器应用程序之外开发 Silverlight 4,我需要按两次 tab 键 来移动控件。数据输入表单中的其他控件(TextBox、RadioButton 等)都表现正常,即只需要一个选项卡。

我创建了一个简单的示例应用程序,发现 ComboBox 的行为正确,因此我的实际应用程序有一些特殊之处导致了问题。我怀疑问题是由于我使用的是AccentColor Theme。我在这些主题上遇到了很多问题,并且已经意识到应该将它们视为可能的样本。正如这篇Introducing the new Silverlight 4 themes 博客文章所暗示的那样,它们的质量不足以用于生产应用程序。

我提出这个问题是为了自己回答,以便获取解决方案以供将来参考。

【问题讨论】:

  • 刚刚发现了一个重复的问题stackoverflow.com/questions/4061821/…,所以这应该被删除了。
  • 在多加注意之后,另一个问题是关于 Button 而不是 ComboBox 所以即使问题的根源(自定义隐式样式)是一样。

标签: silverlight silverlight-4.0


【解决方案1】:

AccentColor Theme 为 ComboBox 创建一个 implicit Style,其中包括设置 Template 属性。此模板使用带有自定义样式的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 还是自定义视觉样式需要它更好。

仅供参考Silverlight Spy 在追踪行为问题方面有很大帮助,即使恕我直言有点贵:-)

【讨论】:

    猜你喜欢
    • 2014-03-26
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    相关资源
    最近更新 更多