using System.Windows; using System.Windows.Controls; namespace MultiTerm.Wpf.CustomControl; /// /// Follow steps 1a or 1b and then 2 to use this custom control in a XAML file. /// /// Step 1a) Using this custom control in a XAML file that exists in the current project. /// Add this XmlNamespace attribute to the root element of the markup file where it is /// to be used: /// /// xmlns:MyNamespace="clr-namespace:MultiTerm.Wpf.Controls" /// /// /// Step 1b) Using this custom control in a XAML file that exists in a different project. /// Add this XmlNamespace attribute to the root element of the markup file where it is /// to be used: /// /// xmlns:MyNamespace="clr-namespace:MultiTerm.Wpf.Controls;assembly=MultiTerm.Wpf.Controls" /// /// You will also need to add a project reference from the project where the XAML file lives /// to this project and Rebuild to avoid compilation errors: /// /// Right click on the target project in the Solution Explorer and /// "Add Reference"->"Projects"->[Browse to and select this project] /// /// /// Step 2) /// Go ahead and use your control in the XAML file. /// /// /// /// public class ExtendedTabControl : TabControl { public static readonly RoutedEvent AddButtonClickedEvent; #region Dotnet Properties /// /// .NET Property for /// public event RoutedEventHandler AddButtonClicked { add { this.AddHandler(AddButtonClickedEvent, value); } remove { this.RemoveHandler(AddButtonClickedEvent, value); } } #endregion static ExtendedTabControl() { DefaultStyleKeyProperty.OverrideMetadata(typeof(ExtendedTabControl), new FrameworkPropertyMetadata(typeof(ExtendedTabControl))); AddButtonClickedEvent = EventManager.RegisterRoutedEvent("AddButtonClicked", RoutingStrategy.Bubble, typeof(RoutedEventArgs), typeof(ExtendedTabControl)); } public override void OnApplyTemplate() { base.OnApplyTemplate(); // get button from template var button = GetTemplateChild("addButton") as Button; if (button != null) { button.Click += OnAddButtonClicked; ; } } private void OnAddButtonClicked(object sender, RoutedEventArgs e) { RoutedEventArgs args = new RoutedEventArgs(AddButtonClickedEvent); RaiseEvent(args); } }