【发布时间】:2011-11-17 18:05:46
【问题描述】:
我在 WPF 中有一个 TabControl。我想查找更改选项卡时发生的事件。这个活动的名称是什么?
【问题讨论】:
-
至少显示一些研究工作。应该因为纯粹的懒惰而被否决。
标签: c# .net wpf events tabcontrol
我在 WPF 中有一个 TabControl。我想查找更改选项卡时发生的事件。这个活动的名称是什么?
【问题讨论】:
标签: c# .net wpf events tabcontrol
TabControl 继承自包含 SelectionChanged event 的 Selector。
<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 ...
}
}
【讨论】:
var tabControl = (TabControl) sender;,然后将所选项目转换为 TabItem var tab = (TabItem) tabControl.SelectedItem;
我只想在这里补充一下我的观点。我将使用@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 的检查。
就是这样!
【讨论】:
我没有得到选择的答案,也许有些事情发生了变化,也许我的设置有所不同。
我的解决方案很简单,您将发件人转换为 tabControle。然后你拉出选定的 TabItem (selectedValue) 并将其转换为 TabItem。
在我的情况下,我需要知道“谁”改变了,所以我寻找 TabItem 的名称,以便更好地对特定事件做出反应。
<TabControl SelectionChanged="OnTabItemChanged">
<TabItem Name="MainTap" Header="Dashboard"></TabItem
</TabControl>
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);
}
}
【讨论】: