I have the following class and want to pass a text variable as RoutedEventArgs.
public class CloseableTabItem : TabItem { String text; public CloseableTabItem() { //This style is defined in themes\generic.xaml DefaultStyleKeyProperty.OverrideMetadata(typeof(CloseableTabItem), new FrameworkPropertyMetadata(typeof(CloseableTabItem))); } public CloseableTabItem(String incomingText) { //This style is defined in themes\generic.xaml DefaultStyleKeyProperty.OverrideMetadata(typeof(CloseableTabItem), new FrameworkPropertyMetadata(typeof(CloseableTabItem))); text = incomingText; } public static readonly RoutedEvent CloseTabEvent = EventManager.RegisterRoutedEvent("CloseTab", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(CloseableTabItem)); public event RoutedEventHandler CloseTab { add { AddHandler(CloseTabEvent, value); } remove { RemoveHandler(CloseTabEvent, value); } } public override void OnApplyTemplate() { base.OnApplyTemplate(); Button closeButton = base.GetTemplateChild("PART_Close") as Button; if (closeButton != null) closeButton.Click += new System.Windows.RoutedEventHandler(closeButton_Click); } void closeButton_Click(object sender, System.Windows.RoutedEventArgs e) { this.RaiseEvent(new RoutedEventArgs(CloseTabEvent, this)); } }
this is the code from Window1, which is the main class in a WPF application.
public partial class Window1 : Window { public static Window1 myWindow1; public Window1() { myWindow1 = this; InitializeComponent(); this.AddHandler(CloseableTabItem.CloseTabEvent, new RoutedEventHandler(this.CloseTab)); } private void CloseTab(object source, RoutedEventArgs args) { TabItem tabItem = args.Source as TabItem; if (tabItem != null) { TabControl tabControl = tabItem.Parent as TabControl; if (tabControl != null) tabControl.Items.Remove(tabItem); } } private void btnAdd_Click(object sender, RoutedEventArgs e) { CloseableTabItem tabItem = new CloseableTabItem("THIS IS A TEST"); MainTab.Items.Add(tabItem); } }
I want to be able to print the value "String Text" in the CloseTab method. How can I pass "String text" with arguments to RoutedEventArgs?
Best wishes!
EDIT
I made some changes to the project, and here is the code
ClosableTabItem.cs
namespace SampleTabControl { public class CloseableTabItem : TabItem { String text; public delegate void TabsEventHandler(object sender, TabsEventArgs e); public CloseableTabItem() {
TabsEventArgs.cs
public class TabsEventArgs : RoutedEventArgs { private readonly string text; public string Text { get { return text; } } public TabsEventArgs(RoutedEvent routedEvent, string text) : base(routedEvent) { this.text = text; } }
Window1.cs
public partial class Window1 : Window { public static Window1 myWindow1; public Window1() { myWindow1 = this; InitializeComponent(); this.AddHandler(CloseableTabItem.CloseTabsEvent, new RoutedEventHandler(this.CloseTab)); } private void CloseTab(object source, RoutedEventArgs args) { TabItem tabItem = args.Source as TabItem; if (tabItem != null) { TabControl tabControl = tabItem.Parent as TabControl; if (tabControl != null) tabControl.Items.Remove(tabItem); } } private void btnAdd_Click(object sender, RoutedEventArgs e) { CloseableTabItem tabItem = new CloseableTabItem("THIS IS A TEST"); MainTab.Items.Add(tabItem); } }
After making changes (when you open more than one tab, the application is disabled), how do you get access to the "text text" of the CloseTab method in the Window1 class?