WPF键盘导航:如何展开面板并将焦点放在该面板的第一个控件中?
对WPF来说有点陌生,我正在开发一个应用程序,它有一个通用的用户输入表单和一个隐藏在扩展器中的“细节”部分。我试图得到它,这样,如果用户标签进入扩展器控件,它将自动展开,并将焦点放入扩展器中的第一个控件 一些简化了XAML:WPF键盘导航:如何展开面板并将焦点放在该面板的第一个控件中?,wpf,Wpf,对WPF来说有点陌生,我正在开发一个应用程序,它有一个通用的用户输入表单和一个隐藏在扩展器中的“细节”部分。我试图得到它,这样,如果用户标签进入扩展器控件,它将自动展开,并将焦点放入扩展器中的第一个控件 一些简化了XAML: <StackPanel> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <
<StackPanel>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="24"/>
<RowDefinition Height="24"/>
</Grid.RowDefinitions>
<Label Content="Email" Grid.Row="0" Grid.Column="0"/>
<TextBox Grid.Row="0" Grid.Column="1"/>
<Label Content="Department" Grid.Row="0" Grid.Column="2"/>
<TextBox Grid.Row="0" Grid.Column="3"/>
<Label Content="Contact Name" Grid.Row="1" Grid.Column="0"/>
<TextBox Grid.Row="1' Grid.Column="1"/>
<Label Content="Phone Number" Grid.Row="1" Grid.Column="2"/>
<TextBox Grid.Row="1" Grid.Column="3"/>
</Grid>
<Expander ExpandDirection="Down" IsExpanded="False" Header="Details">
<StackPanel Orientation="Horizontal">
<Label Content="Address"/>
<TextBox />
<Button Content="Add Another" />
</StackPanel>
</Expander>
</StackPanel>
我不认为有一种纯粹的Xaml方法可以解决这个问题。您可能需要处理扩展器的GotFocus事件,1)展开扩展器,2)在第一个控件上调用Focus()方法。我认为没有一种纯粹的Xaml方法可以实现这一点。您可能需要处理扩展器的GotFocus事件,1)展开扩展器,2)在第一个控件上调用Focus()方法。使用EventTrigger和情节提要将扩展器替换为以下XAML:
<Expander ExpandDirection="Down"
IsExpanded="False"
Header="Details">
<Expander.Style>
<Style>
<Style.Triggers>
<EventTrigger RoutedEvent="Expander.GotFocus">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<BooleanAnimationUsingKeyFrames
Storyboard.TargetProperty="(Expander.IsExpanded)">
<DiscreteBooleanKeyFrame
KeyTime="00:00:01"
Value="True" />
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
</Style>
</Expander.Style>
<StackPanel Orientation="Horizontal">
<Label Content="Address"/>
<TextBox />
<Button Content="Add Another" />
</StackPanel>
</Expander>
使用EventTrigger和情节提要将扩展器替换为以下XAML:
<Expander ExpandDirection="Down"
IsExpanded="False"
Header="Details">
<Expander.Style>
<Style>
<Style.Triggers>
<EventTrigger RoutedEvent="Expander.GotFocus">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<BooleanAnimationUsingKeyFrames
Storyboard.TargetProperty="(Expander.IsExpanded)">
<DiscreteBooleanKeyFrame
KeyTime="00:00:01"
Value="True" />
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
</Style>
</Expander.Style>
<StackPanel Orientation="Horizontal">
<Label Content="Address"/>
<TextBox />
<Button Content="Add Another" />
</StackPanel>
</Expander>
我尝试将GotFocus事件添加到扩展器中,但当我使用MoveFocus时,它将焦点传递到扩展器之外。有没有想过如何将焦点发送到扩展器内的控件?我尝试向扩展器添加一个GotFocus事件,但当我使用MoveFocus时,它将焦点传递到扩展器外。关于如何将焦点发送到扩展器内的控件有什么想法吗?