使用Storyboard更改TabIndex

时间:2014-01-02 17:15:53

标签: wpf xaml storyboard tabcontrol tabindex

单击按钮时是否可以更改TabIndex(仅限XAML)。 以下是我尝试跟随this article和我自己的评论。 谢谢!

<StackPanel>
    <Button x:Name="Button" Content="Go" />
    <TabControl x:Name="Tab">
        <TabItem Header="First">
            <TextBlock Text="First" />
        </TabItem>
        <TabItem Header="Second">
            <TextBlock Text="Second" />
        </TabItem>
        <TabControl.Triggers>
            <EventTrigger RoutedEvent="Button.PreviewMouseLeftButtonDown">
                <BeginStoryboard>
                    <Storyboard>
                        <Int32AnimationUsingKeyFrames
                            Duration="0"
                            Storyboard.TargetName="Tab"
                            Storyboard.TargetProperty="TabIndex">
                            <DiscreteInt32KeyFrame
                                KeyTime="0"
                                Value="1" />
                        </Int32AnimationUsingKeyFrames>
                        <!--<Int32Animation
                            Duration="0"
                            Storyboard.TargetName="Tab" 
                            Storyboard.TargetProperty="TabIndex"
                            FillBehavior="HoldEnd"
                            By="1"
                            From="0"
                            To="1" />-->
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </TabControl.Triggers>
    </TabControl>
</StackPanel>

修改:使用 SelectedIndex 代替 TabIndex 更改当前标签。

1 个答案:

答案 0 :(得分:0)

您的事件触发器放错了位置。不要将触发器放在TabControl上,而是将触发器置于StackPanel

<StackPanel.Triggers>
    <EventTrigger RoutedEvent="Button.PreviewMouseLeftButtonDown">
        <BeginStoryboard>
            <Storyboard>
               <Int32AnimationUsingKeyFrames Duration="0"
                                             Storyboard.TargetName="Tab"
                                            Storyboard.TargetProperty="TabIndex">
                   <DiscreteInt32KeyFrame KeyTime="0"
                                          Value="1" />
               </Int32AnimationUsingKeyFrames>
            </Storyboard>
         </BeginStoryboard>
    </EventTrigger>
</StackPanel.Triggers>

原因

Button.PreviewMouseLeftButtonDown 隧道路由附加事件 ,即它将从根元素开始并继续隧道直到它到达实际发件人。因此,它将从窗口或UserControl开始,并将继续隧道直到它到达Go按钮。它不会隧道到TabControl,因为它是按钮的兄弟,而不是TabControl的父节点。

但是如果你将它放在StackPanel上它会起作用,因为StackPanel是TabControl和Button的父级。 在隧道连接到GO按钮之前,它将通过StackPanel 传递。因此,您的storyBoard将起作用。