【WPF】TabControl禁用部分选项卡
需求:使用TabControl分页栏控件时,由于部分分页下的内容尚未开发完成,不希望用户能够点击切换到那些分页。
百度搜到的一些做法比较麻烦,或者说是直接把分页移除的,这些都不符合需求。需求要的是能看到不可用的选项卡,即要能让用户知道未来会有这些功能,现在只是先占着坑。
例如,下面这个TabControl(已自定义样式),现在要求只有第二、第三个分页可以被点击切换,点击其他分页时弹窗提示,该功能正在开发中。
由于TabControl有一个SelectionChanged选项卡切换的事件,所以想到一个简单是实现方法:
默认先打开第二个分页,保存当前选中的可用分页,点击到不可用的选项卡时,定位到之前那个可用的分页。
后台代码如下:
[Export(typeof(IUiView))]
public partial class UiWindow : UserControl, IUiView
{
private readonly Lazy<UiViewModel> uiViewModel;
private int currentIndex = 1; // 记录tabControl当前选项卡角标
public UiWindow()
{
InitializeComponent();
// 暂时屏蔽未开发完成的分页
tabControl.SelectedIndex = 1;
tabControl.SelectionChanged += TabControl_SelectionChanged;
}
private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (tabControl.SelectedIndex != 1 && tabControl.SelectedIndex != 2) // 1和2是当前版本可用的分页角标
{
tabControl.SelectedIndex = currentIndex;
MessageBox.Show("该功能正在努力开发中\n 敬请期待!");
}
else
{
currentIndex = tabControl.SelectedIndex;
}
}
}
2017.1.4更新:
发现之前的做法有一个Bug,因为点击切换到不可用分页时,tabControl.SelectedIndex = currentIndex 使得TabControl_SelectionChanged回调又被触发了一次(一共两次)。
现在改为如下:
直接在后台的Init()函数中禁用分页
// 暂时屏蔽未开发完成的分页
ItemCollection coll = tabControl.Items;
for (int i = 0; i < coll.Count; i++)
{
if (i == 1 || i == 2)
{
(coll[i] as TabItem).IsEnabled = true;
}
else
{
(coll[i] as TabItem).IsEnabled = false;
}
}
这种做法的缺点是没法设置点击到被禁用页面时的友好提示,因为该页面已被禁用,不会进入TabControl_SelectionChanged回调。
【WPF】TabControl禁用部分选项卡的更多相关文章
- tabcontrol动态生成选项卡,并且在选项卡中添加窗体
http://blog.csdn.net/zx13525079024/article/details/6084733 今天在论坛上看到有人问到,如果在点击TRVEVIEW时动态生成tabcontrol ...
- WPF TabControl 隐藏标头
1. 将每个 TabItem 的 Visibility 属性设置为 Visibility.Collapsed 即可隐藏标头 <TabItem Visibility="Collapsed ...
- WPF窗体禁用最大化按钮
禁用WPF窗体的最大化按钮可以使用Windows API改变按钮状态的方法实现.使用GetWindowLong可以得到当前按钮的状态.使用SetWindowLong可以设置按钮的状态.使用SetWin ...
- WPF TabControl Unload俩次的解决方案
WPF中,有些控件会多次触发Unload,有点莫名其妙~ Unload的多次触发 TabControl的内容,我是这么设置的: 在TabItem的CacheSettingView中,监听Loaded/ ...
- WPF TabControl美化
<Window.Resources> <!-- TabItem的样式 --> <Style TargetType="{x:Type TabItem}" ...
- WPF TabControl 模拟动画
using System; using System.Threading; using System.Windows; using System.Windows.Controls; using Wan ...
- WPF TabControl控件-事件相关问题
TabControl控件的TabItem的Content元素,例如:DataGrid控件,在对事件的处理时,需要对事件的源引起关注,当需要处理DataGrid的事件时,事件会传递到TabControl ...
- wpf TabControl控件的SelectionChanged方法
对于老手来说很简单,但是新手我从百度上找了好久没找到,最后还是去谷歌找到的,哎,万能的google. 前端界面: <TabControl Margin="0,10,0,0" ...
- WPF TabControl SelectionChanged 重复执行的问题
很邪门的问题,我曾经都感觉是微软的bug了. 问题是这样的:在我的tabcontrol下的tabitem中有一个combobox控件,由于一些原因,需要执行tabcontrol的SelectionCh ...
随机推荐
- Nginx中的安全配置
1.测试环境 操作系统:CentOS6.5 Web服务器:Nginx1.4.6 Php版本:Php5.4.26 2.Nginx介绍 1.nginx本身不能处理PHP,它只是个web服务器,当接收到请求 ...
- 批量修改Java类文件中引入的package包路径
http://libeey.blogbus.com/logs/101848958.html当复制其他工程中的包到新工程的目录中时,由于包路径不同,出现红叉,下面的类要一个一个修改包路径,类文件太多的话 ...
- Java虚拟机学习 - 内存调优 ( 9 )
JVM调优主要是针对内存管理方面的调优,包括控制各个代的大小,GC策略.由于GC开始垃圾回收时会挂起应用线程,严重影响了性能,调优的目是为了尽量降低GC所导致的应用线程暂停时间. 减少Full GC次 ...
- Android用shareUserID实现多个Activity显示在同一界面
近来整理文档,发现两年前研究Android多个Activity叠加显示的方案.时光荏苒,一去不回. 虽然后来没有用上,但还是整理如下,Android版本还是2.2的: ActivityGroup描画方 ...
- RAC安装gird,第一个节点执行root.sh报"The ora.asm resource is not ONLINE"错误
RAC版本:11.2.0.4 OS版本:linux 6.4 RAC安装gird,第一个节点执行root.sh运行失败,报"The ora.asm resource is not ONLINE ...
- Spring.net(一)----Spring.NET框架简介及模块说明
简介: Spring.NET框架包括很多功能,Spring.NET 1.0包括完整的IoC容器和AOP类库.1.1版加入Web.ORM和数据模块.Spring.NET的下载包中并不包含与其它类库 ...
- Form_Form Builder的常用变量(概念)
2014-12-30 Created By BaoXinjian
- PLSQL_统计信息系列07_数据字典统计信息的导出和导入
2014-05-05 Created By BaoXinjian
- 【转】谈“P=NP?”
“P=NP?” 通常被认为是计算机科学最重要的问题.有一个叫Clay Math的研究所,甚至悬赏 100 万美元给解决它的人.可是我今天要告诉你的是,这个问题其实是不存在的,它根本不需要解决. 我并不 ...
- Python isalpha() 方法
描述 Python isalpha() 方法检测字符串是否只由字母或汉字组成. 语法 isalpha() 方法语法: S.isalpha() 参数 无. 返回值 如果字符串至少有一个字符并且所有字符都 ...