【问题标题】:TabChanged event of TabControl in WPFWPF中TabControl的TabChanged事件
【发布时间】:2011-11-17 18:05:46
【问题描述】:

我在 WPF 中有一个 TabControl。我想查找更改选项卡时发生的事件。这个活动的名称是什么?

【问题讨论】:

  • 至少显示一些研究工作。应该因为纯粹的懒惰而被否决。

标签: c# .net wpf events tabcontrol


【解决方案1】:

TabControl 继承自包含 SelectionChanged eventSelector

<TabControl SelectionChanged="OnSelectionChanged" ... />

private void OnSelectionChanged(Object sender, SelectionChangedEventArgs args)
{
    var tc = sender as TabControl; //The sender is a type of TabControl...

    if (tc != null)
    {
        var item = tc.SelectedItem;

        //Do Stuff ...
    }
}

【讨论】:

  • 您不能从 TabControl 获取 TabItem 作为发送者,发送者将是 TabControl
  • 我认为要使其正常工作,您需要将发件人转换为 TabControl var tabControl = (TabControl) sender;,然后将所选项目转换为 TabItem var tab = (TabItem) tabControl.SelectedItem;
【解决方案2】:

我只想在这里补充一下我的观点。我将使用@pratap k 的酷答案来做到这一点。

<TabControl x:Name="MyTab" SelectionChanged="TabControl_SelectionChanged">
    <TabItem x:Name="MyTabItem1" Header="One"/>
    <TabItem x:Name="MyTabItem2" Header="2"/>
    <TabItem x:Name="MyTabItem3" Header="Three"/>
</TabControl>

private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (MyTabItem1 !=null && MyTabItem1.IsSelected)
    // do your staff
    if (MyTabItem2 !=null && MyTabItem2.IsSelected)
    // do your staff
    if (MyTabItem3 !=null && MyTabItem3.IsSelected)
    // do your staff
}

如您所见,不同之处在于添加了对NULL 的检查。

就是这样!

【讨论】:

    【解决方案3】:

    我没有得到选择的答案,也许有些事情发生了变化,也许我的设置有所不同。

    我的解决方案很简单,您将发件人转换为 tabControle。然后你拉出选定的 TabItem (selectedValue) 并将其转换为 TabItem。

    在我的情况下,我需要知道“谁”改变了,所以我寻找 TabItem 的名称,以便更好地对特定事件做出反应。

    XAML

    <TabControl SelectionChanged="OnTabItemChanged">
        <TabItem Name="MainTap" Header="Dashboard"></TabItem
    </TabControl>
    

    C#

    private async void OnTabItemChanged(object sender, SelectionChangedEventArgs e)
    {
    
        TabControl tabControl = sender as TabControl; // e.Source could have been used instead of sender as well
        TabItem item = tabControl.SelectedValue as TabItem;
        if (item.Name == "MainTap")
        {
            Debug.WriteLine(item.Name);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多