读书人

wpf 窗体添载于tabControl_SelectionC

发布时间: 2013-12-20 17:03:19 作者: rapoo

wpf 窗体加载于tabControl_SelectionChanged时间触发顺序
我有一个窗体 里面有一个tabControl控件。并写了tabControl_SelectionChanged事件。
代码如下:


/// <summary>
/// 选择选项卡
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public event RoutedEventHandler tabChanged;
private void tabControl1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.Source is TabControl)
{
int tab = this.tabControl1.SelectedIndex;
TabIniti(tab);
}

}


public void TabIniti(int tab)
{
switch (tab)
{
case 0:
this.cbbm.Visibility = Visibility.Collapsed;
this.sjxx.Visibility = Visibility.Collapsed;
this.xxxx.Visibility = Visibility.Visible;
break;
case 1:
this.cbbm.Visibility = Visibility.Visible;
this.sjxx.Visibility = Visibility.Collapsed;
this.xxxx.Visibility = Visibility.Collapsed;
break;
case 2:
this.cbbm.Visibility = Visibility.Collapsed;
this.sjxx.Visibility = Visibility.Visible;
this.xxxx.Visibility = Visibility.Collapsed;
break;
}
}

问题来了,插入断点,窗体在加载的时候就会直接跳进tabControl_SelectionChanged事件,,,我现在能想到的只能是加个全局参数去判断是否第一次加载。
有没有更好的方法去判断,第一次加载窗体的时候不触发tabControl_SelectionChanged事件啊?
在线等,,,
[解决办法]
正常情况下,InitializeComponent();必须放在最开始,它是负责初始化界面控件的,你2楼的代码就是因为在InitializeComponent()之前对界面控件进行操作,所以才出错。

(把你在XAML中的对TabControl的SelectionChanged事件的代码先删除)
程序开始:
InitializeComponent();
tabControl.SelectionChanged += firstTabControl_SelectionChanged;

        private void firstTabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{


tabControl.SelectionChanged -= firstTabControl_SelectionChanged;
tabControl.SelectedIndex = -1;
tabControl.SelectionChanged += tabControl_SelectionChanged;
}

private void tabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
//你本来的代码......
}

读书人网 >CAD教程

热点推荐