【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 ...
随机推荐
- Google Volley框架之https请求
先插一句.Google出的volley框架本身是支持https请求的,可是仅仅是针对有第三方机构认证过的. 假设自己随便在网上搞的一个证书,那volley是不支持请求的. 本文讲下怎样让volley支 ...
- PHP-多域名单点登陆方案
1.只是二级域名不同(比如a.xx.com, b.xx.com) 利用cookie, 设置domain为".xx.com"即可 2.多个本域名都不相同(比如www.a.com, w ...
- 推荐系统之矩阵分解及其Python代码实现
有如下R(5,4)的打分矩阵:(“-”表示用户没有打分) 其中打分矩阵R(n,m)是n行和m列,n表示user个数,m行表示item个数 那么,如何根据目前的矩阵R(5,4)如何对未打分的商品进行评分 ...
- jQuery:用 lightTreeview 实现树形分类菜单的功能 展开收缩分类代码
最近在做前端开发项目中,需要用到树形结构.在网上查阅到了许多相应资源.其中觉得lightTreeview是一款非常不错的JQ树形分类菜单代码,结构简单,支持多级.还有详细的参数可以配置,以实现各种效果 ...
- 【LeetCode】153. Find Minimum in Rotated Sorted Array (3 solutions)
Find Minimum in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to you ...
- RabbitMQ消息队列(五):Routing 消息路由[转]
上篇文章中,我们构建了一个简单的日志系统.接下来,我们将丰富它:能够使用不同的severity(严重程度)来监听不同等级的log.比如我们希望只有error的log才保存到磁盘上. 1. Bindin ...
- Linux前台、后台、挂起、退出、查看命令汇总
command & 直接在后台执行程序 ctrl+c 退出前台的命令,不再运行 ctrl+z挂起前台命令暂停运行,回到shell命令行环境中 bg 将刚挂起的命令放到后台执行 bg % ...
- mysql两列合成一列
update manage set mark = concat(mark,remark) select concat(mark,remark) as pp from manage
- RhinoMock中无参数方法和无返回值方法的使用
无返回值方法,RhinoMock的例子是这么做的: demo.VoidThreeArgs(, "", 0f); LastCall.On(demo).Callback<int, ...
- mongo操作及相关资料
mongo操作 find方法 db.collection_name.find(); 查询所有的结果: select * from users; db.users.find(); 指定返回那些列(键): ...