完成对TabItem加载自定义的右击菜单:
Popup rootPopup = new Popup();//声明一个Popup对象
for (int i = 0; i < LayoutRoot.Children.Count; i++)
{
FrameworkElement fe = LayoutRoot.Children[i] as FrameworkElement;
//fe.MouseLeftButtonDown += new MouseButtonEventHandler(chuangjianduochuangkou_MouseLeftButtonDown);
fe.GotFocus += new RoutedEventHandler(fe_GotFocus);
}
LayoutRoot.MouseLeftButtonDown += new MouseButtonEventHandler(LayoutRoot_MouseLeftButtonDown);
void LayoutRoot_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
rootPopup.IsOpen = false;//点击之后隐藏Popup
}
void fe_GotFocus(object sender, RoutedEventArgs e)
{
rootPopup.IsOpen = false;//点击之后隐藏Popup
}
tab.MouseRightButtonDown += new MouseButtonEventHandler(tab_MouseRightButtonDown);
tab.MouseRightButtonUp += new MouseButtonEventHandler(tab_MouseRightButtonUp);
/// <summary>
/// 鼠标右键释放事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void tab_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
{
TabItem a = sender as TabItem;
string aa = a.Name;
rootPopup.IsOpen = true;//显示Popup
rootPopup.Width = App.Current.Host.Content.ActualWidth;//设置Popup的宽度即当前区域的宽度
rootPopup.Height = App.Current.Host.Content.ActualHeight;//设置Popup的高度即当前区域的宽度
Grid rootGrid = new Grid();
ListBox listBox = new ListBox();
//声明TextBlock对象即自定义菜单的项
//TextBlock txt = new TextBlock()
//{
// Text = "刷新本标签",
// Tag = a.Name
//};
//txt.MouseLeftButtonUp += new MouseButtonEventHandler(txt_MouseLeftButtonUp); //注册TextBlock的鼠标点击事件
//listBox.Items.Add(txt);
TextBlock txt2 = new TextBlock()
{
Text = "关闭本标签",
Tag = a.Name
};
txt2.MouseLeftButtonUp += new MouseButtonEventHandler(txt2_MouseLeftButtonUp); //注册TextBlock的鼠标点击事件
listBox.Items.Add(txt2);
TextBlock txt3 = new TextBlock()
{
Text = "关闭全部标签",
Tag = a.Name
};
txt3.MouseLeftButtonUp += new MouseButtonEventHandler(txt3_MouseLeftButtonUp); //注册TextBlock的鼠标点击事件
listBox.Items.Add(txt3);
rootGrid.Children.Add(listBox);
Point point = e.GetPosition(LayoutRoot);//获得当前鼠标点击的坐标
rootPopup.Child = rootGrid;//设置Popup的承载的美容为rootGrid
rootPopup.Margin = new Thickness(point.X, point.Y, 0, 0);//设置Popup的显示的位置
}
/// <summary>
/// 自定义菜单的点击时间
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void txt_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)//刷新
{
TextBlock t = sender as TextBlock;
rootPopup.IsOpen = false;//点击之后隐藏Popup
TabItem item = this.tabControl1.FindName(t.Tag.ToString()) as TabItem;
}
void txt2_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)//关闭本标签
{
TextBlock t = sender as TextBlock;
rootPopup.IsOpen = false;//点击之后隐藏Popup
TabItem item = this.tabControl1.FindName(t.Tag.ToString()) as TabItem;
tabControl1.Items.Remove(item);
listBox1.Items.Remove(item.Name);
TabCount--;
}
void txt3_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)//关闭所有标签
{
TextBlock t = sender as TextBlock;
rootPopup.IsOpen = false;//点击之后隐藏Popup
for (int i = 0; i < TabCount; i++)
{
TabItem item = this.tabControl1.FindName("tab" + i) as TabItem;
tabControl1.Items.Remove(item);
listBox1.Items.Remove(item.Name);
}
TabCount = 0;
//txtStatus.Text = "你点击了:" + (sender as TextBlock).Text;//显示点击的内容
}
/// <summary>
/// 鼠标右键点击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void tab_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
e.Handled = true;//屏蔽系统右键菜单
}