Silverlight - 按钮控制选项卡停两次神秘

时间:2010-10-31 04:13:59

标签: silverlight tabs keyboard-events

我正在调试一个大型的Silverlight应用程序,我在每个表单上找到所有按钮控件接收选项卡焦点两次,然后再进行下一个控件。我不能在一个简单的hello world应用程序中重现这种行为。有趣的是,这个问题在HyperlinkBut​​ton控件上不会以相同的形式出现,只有Button。知道会导致这种情况的原因,或者有些事情可以帮助我找出原因吗?

提前致谢。

[编辑]

如果我将IsTabStop属性设置为false,那么它只会在按钮上标记一次。我不愿意使用它作为修复,因为我真的想知道问题的根源是什么。

我已将问题跟踪到我们在资源文件中使用的Implicit按钮样式。我真的很想知道为什么这个XAML会导致这种情况发生。

隐式按钮样式XAML

<Style TargetType="Button" x:Key="DefaultButtonStyle">
    <Setter Property="Background" Value="{StaticResource NormalBrush}"/>
    <Setter Property="Foreground" Value="{StaticResource TextContentBrush}"/>
    <Setter Property="FontFamily" Value="{StaticResource ContentFontFamily}"/>
    <Setter Property="FontSize" Value="{StaticResource ContentFontSize}"/>
    <Setter Property="Padding" Value="3"/>
        <Setter Property="Padding" Value="10,3,10,3" />
    <Setter Property="BorderThickness" Value="1"/>
    <Setter Property="BorderBrush" Value="{StaticResource NormalBorderBrush}"/>
    <Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid x:Name="grid" RenderTransformOrigin="0.5,0.5">
    <Grid.RenderTransform>
        <TransformGroup>
            <ScaleTransform/>
            <SkewTransform/>
            <RotateTransform/>
            <TranslateTransform/>
        </TransformGroup>
    </Grid.RenderTransform>
    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup x:Name="CommonStates">
            <VisualStateGroup.Transitions>
                <VisualTransition From="MouseOver" GeneratedDuration="0:0:0.1" To="Pressed">
                    <VisualTransition.GeneratedEasingFunction>
                        <ExponentialEase EasingMode="EaseIn" Exponent="-2"/>
                    </VisualTransition.GeneratedEasingFunction>
                </VisualTransition>
                <VisualTransition From="Pressed" GeneratedDuration="0:0:0.1" To="MouseOver">
                    <VisualTransition.GeneratedEasingFunction>
                        <ExponentialEase EasingMode="EaseOut" Exponent="0"/>
                    </VisualTransition.GeneratedEasingFunction>
                </VisualTransition>
                <VisualTransition From="Normal" GeneratedDuration="0:0:0.01" To="MouseOver">
                    <VisualTransition.GeneratedEasingFunction>
                        <ExponentialEase EasingMode="EaseIn" Exponent="7"/>
                    </VisualTransition.GeneratedEasingFunction>
                </VisualTransition>
                <VisualTransition From="MouseOver" GeneratedDuration="0:0:0.1" To="Normal">
                    <VisualTransition.GeneratedEasingFunction>
                        <CircleEase EasingMode="EaseIn"/>
                    </VisualTransition.GeneratedEasingFunction>
                </VisualTransition>
            </VisualStateGroup.Transitions>
            <VisualState x:Name="Normal"/>
            <VisualState x:Name="MouseOver">
                <Storyboard>
                    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="MouseOverBorder">
                        <EasingDoubleKeyFrame KeyTime="0" Value="1"/>
                    </DoubleAnimationUsingKeyFrames>
                    <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Control.Foreground).(SolidColorBrush.Color)" Storyboard.TargetName="contentPresenter">
                        <EasingColorKeyFrame KeyTime="0" Value="{StaticResource BaseColor2}"/>
                    </ColorAnimationUsingKeyFrames>
                </Storyboard>
            </VisualState>
            <VisualState x:Name="Pressed">
                <Storyboard>
                    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="PressedBorder" Storyboard.TargetProperty="(UIElement.Opacity)">
                        <SplineDoubleKeyFrame KeyTime="00:00:00.1000000" Value="1.0" KeySpline="0,0,0.0299999993294477,0.920000016689301"/>
                    </DoubleAnimationUsingKeyFrames>
                    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" Storyboard.TargetName="grid">
                        <EasingDoubleKeyFrame KeyTime="0:0:0.01" Value="1.05"/>
                    </DoubleAnimationUsingKeyFrames>
                    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)" Storyboard.TargetName="grid">
                        <EasingDoubleKeyFrame KeyTime="0:0:0.01" Value="1.05"/>
                    </DoubleAnimationUsingKeyFrames>
                    <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Control.Foreground).(SolidColorBrush.Color)" Storyboard.TargetName="contentPresenter">
                        <EasingColorKeyFrame KeyTime="0" Value="{StaticResource BaseColor2}"/>
                    </ColorAnimationUsingKeyFrames>
                </Storyboard>
            </VisualState>
            <VisualState x:Name="Disabled">
                <Storyboard>
                    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="DisabledVisualElement" Storyboard.TargetProperty="(UIElement.Opacity)">
                        <SplineDoubleKeyFrame KeyTime="00:00:00.1000000" Value="0.75"/>
                    </DoubleAnimationUsingKeyFrames>
                    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="contentPresenter" Storyboard.TargetProperty="(UIElement.Opacity)">
                        <SplineDoubleKeyFrame KeyTime="00:00:00.1000000" Value="0.3"/>
                    </DoubleAnimationUsingKeyFrames>
                </Storyboard>
            </VisualState>
        </VisualStateGroup>
        <VisualStateGroup x:Name="FocusStates">
            <VisualState x:Name="Focused" >
                <Storyboard>
                    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="FocusVisualElement" Storyboard.TargetProperty="(UIElement.Opacity)">
                        <SplineDoubleKeyFrame KeyTime="00:00:00" Value="1.0" />
                    </DoubleAnimationUsingKeyFrames>
                </Storyboard>
            </VisualState>
            <VisualState x:Name="Unfocused"/>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
    <Border x:Name="BaseBorder" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="1" CornerRadius="1" >
        <Border.Background>
            <SolidColorBrush Color="{StaticResource BaseColor7}"/>
        </Border.Background>
        <Grid>
            <Border x:Name="Background" BorderBrush="{StaticResource NormalInnerBorderBrush}" Background="{TemplateBinding Background}"/>
            <Border x:Name="MouseOverBorder" Opacity="0" Background="{StaticResource MouseOverBrush}" Margin="-0.5,-0.5,0.5,0.5"/>
            <Border x:Name="PressedBorder" BorderThickness="{TemplateBinding BorderThickness}" Opacity="0" Background="{StaticResource MouseOverBrush}" RenderTransformOrigin="0.5,0.5" Margin="-1">
                <Border.RenderTransform>
                    <TransformGroup>
                        <ScaleTransform/>
                        <SkewTransform/>
                        <RotateTransform/>
                        <TranslateTransform/>
                    </TransformGroup>
                </Border.RenderTransform>
            </Border>
        </Grid>
    </Border>
    <Rectangle x:Name="DisabledVisualElement" Fill="{StaticResource DisabledBackgroundBrush}" IsHitTestVisible="false" Opacity="0" RadiusY="1" RadiusX="1" Stroke="{StaticResource DisabledBackgroundBrush}"/>
    <ContentControl x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Foreground="{TemplateBinding Foreground}" Padding="2" />
    <Rectangle x:Name="FocusVisualElement" Stroke="{StaticResource FocusedBrush}" Margin="-1" Opacity="0" /> <!--IsHitTestVisible="false"-->
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

2 个答案:

答案 0 :(得分:6)

尝试将模板中IsTabStop的{​​{1}}属性设置为False:

ContentControl

答案 1 :(得分:1)

您的Button模板上可能存在IsTabStop设置为true的内容。

您的模板有多复杂?尝试重置为默认模板,看看是否能解决您的问题。