【发布时间】:2021-05-03 17:06:51
【问题描述】:
有没有办法自动切换到承载我想要关注的控件的 TabItem?
我的示例窗口来举例说明这个问题。
<Window x:Class="Sample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Sample"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.Resources>
<Style TargetType="Button">
<Setter Property="Width" Value="80"/>
<Setter Property="Height" Value="24"/>
</Style>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<TabControl Grid.Row="0" Margin="10" Background="White">
<TabItem Header="TabItem1">
<Button x:Name="SomeButton" Content="Set Focus on TextBox" Width="120" Click="Button_Click"/>
</TabItem>
<TabItem Header="TabItem2">
<TextBox x:Name="SomeTextBox" Margin="10" Text="Sample text"/>
</TabItem>
</TabControl>
<StackPanel Grid.Row="1" Margin="10">
<Button Content="Cancel" HorizontalAlignment="Right" Click="Button_Click_1"/>
</StackPanel>
</Grid>
</Window>
以及背后的代码:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
SomeTextBox.Focus();
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
Close();
}
}
所以,当单击SomeButton 时,我想将焦点移至SomeTextBox,但要使其工作,我必须先选择TabItem2。在提供的示例中,这显然很容易,但我正在寻找一种自动化解决方案,它“知道”SomeTextBox 属于 TabItem2 并切换到它,然后将重点放在所需的控件上。不用说,在实际情况下,SomeTextBox 可能在其他类型窗格中的VisualTree 中的其他级别。有可能吗?
顺便说一句,如果有帮助,此类功能的应用会将焦点设置在通过错误验证突出显示的控件上和/或切换到包含它的窗格。
【问题讨论】: