TabControl_SelectionChanged总是被触发

时间:2018-09-17 13:43:52

标签: wpf

我对Tab控件有问题,如果我没有更改选项卡,则SelectionChanged将多次触发,这是我的代码:

function getFonts (obj) {
    var o = obj || {},
        sheet = document.styleSheets,
        rule = null,
        i = sheet.length, j;
    while( 0 <= --i ){
        rule = sheet[i].rules || sheet[i].cssRules || [];
        j = rule.length;
        while( 0 <= --j ){
            if( rule[j].constructor.name === 'CSSFontFaceRule' ){
                if (!(rule[j].style.fontFamily in o)) o[ rule[j].style.fontFamily ] = Object.create(null);
                o[ rule[j].style.fontFamily ][ rule[j].style.fontWeight + '-' + rule[j].style.fontStyle ] = rule[j].style.src;
            };
        }
    }
    return o;
}

有人可以帮我解决这个问题吗?

非常感谢

2 个答案:

答案 0 :(得分:0)

您有任何刷新视图的过程吗?刷新视图时,将执行selectionchanged事件。我在自己的tabcontrol中使用您的代码,效果很好。

尝试使用此事件

private void TabControl_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        int tabItem = ((sender as TabControl)).SelectedIndex;
        if (e.Source is TabControl) // This is a soultion of those problem.
        {
            switch (tabItem)
            {
                case 0:
                    //something
                    break;
                case 1:
                    //something
                    break;
            }
        }
    }

答案 1 :(得分:0)

我终于找到了解决方法:

private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
        if (ReferenceEquals(e.OriginalSource, this.tab_main))
        {
            if (tab_type.IsSelected)
            {
               //something
            }

            else if (tab_problem.IsSelected)
            {
               //something
            }
         }
}

我在这篇文章中根据HiredMind的评论找到了这个解决方案: https://stackoverflow.com/a/3659889/6688895

我在引用他的答案

  

如果遇到此问题:不要只检查OriginalSource的类型-检查以确保OriginalSource实际上引用了您的特定TabControl:“ if(ReferenceEquals(e.OriginalSource,this.myTabControl)”。 ,那么所有子标签页控件都将激活您的事件处理程序代码。– HiredMind 2013年8月6日15:12