WPF TabControl控件禁止切换

2 篇文章 0 订阅

背景:在使用TabControl控件时,有时希望在某种情况下tabItem禁止切换,即当前的TabItem作为显示窗口使用。在一般情况下可恢复正常状态,单击可切换。TabControl没有这个属性可以控制。

摸索:在网上找了很久,在CodeProject, stackoverflow等网站上有不少的解决方法,但都比较麻烦和复杂。下面给出我自己的一个解决方法。

解决思路:TabControl控件有SelectionChanged事件,可以有SelectionChanged事件中做文章,当需要禁止切换时,可以在SelectionChanged事件中将禁止切换的页面恢复到SelectedIndex即可。通过增加一个bool变量控制是否禁止切换。

 视觉森林  2014.04.10

界面XAML代码:

 

<Window x:Class="TabControl.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">

    <Grid>

        <Button

            Content="禁止切换"

            Height="39"

            HorizontalAlignment="Left"

            Margin="288,244,0,0"

            Name="button1"

            VerticalAlignment="Top"

            Width="75"

            Click="button1_Click"/>

        <Button

            Content="允许切换"

            Height="38"

            HorizontalAlignment="Left"

            Margin="393,245,0,0"

            Name="button2"

            VerticalAlignment="Top"

            Width="75"

            Click="button2_Click"/>

        <TabControl

            Height="166"

            HorizontalAlignment="Left"

            Margin="52,60,0,0"

            Name="tabControl1"

            VerticalAlignment="Top"

            Width="267"

            SelectionChanged="tabControl1_SelectionChanged">

            <TabItem

                Header="tabItem1"

                Name="tabItem1">

                <Grid />

            </TabItem>

            <TabItem

                Header="tabItem2"

                Name="tabItem2">

                <Grid />

            </TabItem>

            <TabItem

                Header="tabItem3"

                Name="tabItem3">

                <Grid />

            </TabItem>

        </TabControl>

    </Grid>

</Window>

 

C#代码:

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

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 TabControl

{

    ///<summary>

    /// Interaction logic for MainWindow.xaml

    ///</summary>

    public partial class MainWindow : Window

    {

        privatebool IsFixTab=false;

        public MainWindow()

        {

            InitializeComponent();

        }

 

        privatevoid tabControl1_SelectionChanged(object sender, SelectionChangedEventArgs e)

        {

            if(e.OriginalSource==tabControl1 &&IsFixTab==true)

            {

                e.Handled = true;

                tabControl1.SelectedIndex = 1;

            }

        }

 

        privatevoid button1_Click(object sender, RoutedEventArgs e)

        {

            tabControl1.SelectedIndex = 1; //需要手动更新至需要显示的TabItem

            IsFixTab= true;

        }

 

        privatevoid button2_Click(object sender, RoutedEventArgs e)

        {

            IsFixTab= false;

        }

    }

}

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值