单击按钮时是否可以更改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 更改当前标签。
答案 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将起作用。