Silverlight-按钮控制选项卡停止两次神秘 [英] Silverlight - Button control tab stop twice mystery

查看:84
本文介绍了Silverlight-按钮控制选项卡停止两次神秘的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在调试一个大型的Silverlight应用程序,我发现在每种形式上,所有按钮控件都会在进入下一个控件之前两次获得标签焦点.但是,我无法在简单的hello world应用程序中重现此行为.有趣的是,在相同形式的HyperlinkBut​​ton控件上,仅在Button上不会发生此问题.知道会导致这种情况的原因是什么,或者有什么方法可以帮助我找出导致这种情况的原因?

I'm debugging a large Silverlight application and i'm finding on every form all button controls receive tab focus twice before going to next control. I cannot reproduce this behavior in a simple hello world application though. Interestingly this problem does not occur on HyperlinkButton controls in the same form, just Button. Any idea what would cause this, or some things to help me isolate the cause of this?

谢谢.

如果我将IsTabStop属性设置为false,则它只是一次点击按钮.我很犹豫将其用作修复程序,因为我真的很想知道问题的根源是什么.

If I set the IsTabStop property to false then it just tabs on the button one time. I hesitate to use this as a fix as I really would like to know what the source of the problem is.

我已将问题追溯到我们在资源文件中使用的隐式"按钮样式.我真的很想知道为什么此XAML会导致这种情况发生.

I've traced the problem to the Implicit button style that we're using in a resource file. I would really like to know why this XAML causes this to happen.

隐式按钮样式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>

推荐答案

尝试将模板中ContentControlIsTabStop属性设置为False:

Try setting the IsTabStop property of the ContentControl in your template to False:

<ContentControl x:Name="contentPresenter" IsTabStop="False" (...) />

这篇关于Silverlight-按钮控制选项卡停止两次神秘的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆