c# - 为什么我的 WPF TabControl 会自动切换选项卡?

标签 c# wpf

在具有 3 个选项卡的 TabControl 中:

  1. Tab1 包含“下一步”按钮。
  2. 单击“下一步”时,TabControl 设置为显示 Tab2 并且计时器启动(2 秒)
  3. 计时器结束后,TabControl 设置为显示 Tab3

如果在 #3 发生时包含 TabControl 的窗口没有焦点,那么当它收到焦点时,它将切换回显示 Tab2。为什么?

主窗口代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void NextBtn_Click(object sender, RoutedEventArgs e)
        {
            DoStuff();
        }

        private async void DoStuff()
        {
            MainTabControl.SelectedItem = Tab2;

            await Task.Factory.StartNew((Action)(() =>
            {
                Thread.Sleep(2000);
            }));

            MainTabControl.SelectedItem = Tab3;
        }
    }
}

WPF代码:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" Topmost="True">
    <TabControl Name="MainTabControl">
        <TabItem Name="Tab1">
            <TabItem.Header>
                <TextBlock Text="Tab 1" />
            </TabItem.Header>
            <StackPanel>
                <TextBlock Text="Tab 1 content" />
                <Button Name="NextBtn" Click="NextBtn_Click" Content="Next tab" Width="50" HorizontalAlignment="Right" />
            </StackPanel>
        </TabItem>

        <TabItem Name="Tab2">
            <TabItem.Header>
                <TextBlock Text="Tab 2" />
            </TabItem.Header>
            <StackPanel>
                <TextBlock Text="Tab 2 content" />
            </StackPanel>
        </TabItem>

        <TabItem Name="Tab3">
            <TabItem.Header>
                <TextBlock Text="Tab 3" />
            </TabItem.Header>
            <StackPanel>
                <TextBlock Text="Tab 3 content" />
            </StackPanel>
        </TabItem>
    </TabControl>
</Window>

完整项目:https://ufile.io/165121

最佳答案

我用 Snoop 调试了你的程序,当你调用时我看到了 MainTabControl.SelectedItem = Tab3; 并且您在其他窗口中有焦点,tab2 是聚焦,因此当您选择程序的窗口时,tab2 会显示。

我修复了它,添加了第二行:

MainTabControl.SelectedItem = Tab3;
((TabItem) MainTabControl.SelectedItem).Focus();

希望这可以帮助你。

关于c# - 为什么我的 WPF TabControl 会自动切换选项卡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41064233/

相关文章:

wpf - 将 Enum 转换为 TextBlock 文本中的字符串

c# - 我可以为此使用什么数学模型以及如何在 c++/c# 中实现它

c# - 如何处理 Automapper 异常(try/catch)

c# - Asp.net Core 2 - 如何在 Asp.net Core 2.0 中使用 ServiceLocator

C#:委托(delegate),紧凑访问者, "universal callable"参数类型

c# - 如何在 WPF XAML 中创建颜色修改选项? - 类似于扩展方法

wpf - WPF 应用程序的 19 个线程

c# - 对不同语言/体系结构/操作系统中相对较小的数字取对数

c# - 具有水平和垂直方向的 WrapPanel

c# - Prism 区域在内容区域中没有变化 - WPF