Use MenuItem.Tag to store user object : Menu « Windows Presentation Foundation « C# / C Sharp

Use MenuItem.Tag to store user object

Use MenuItem.Tag to store user object

<Window x:Class="WpfApplication1.Window1"
    Title="AppWindowsSample" Height="200" Width="300" 
    <Menu Name="menu1" >
      <MenuItem Header="Window" x:Name="windowMenu">
        <MenuItem Header="SubmenuOpened event" />
    <Button Margin="10" Name="newWindowButton" Height="23" VerticalAlignment="Top">New Window</Button>
    <StatusBar Grid.Row="2" Name="statusBar1" >
      <TextBlock x:Name="statusText">Status</TextBlock>
    <Button Height="23" Margin="10" Name="shutdownButton" VerticalAlignment="Top" >Shutdown</Button>

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Windows.Controls.Primitives;
using System.Diagnostics;
using System.ComponentModel;

namespace WpfApplication1 {
  public partial class Window1 : System.Windows.Window {

    public Window1() {

      DataContext = Application.Current.Windows;
      statusText.Text = Application.Current.ShutdownMode.ToString();

      newWindowButton.Click += new RoutedEventHandler(newWindowButton_Click);
      shutdownButton.Click += new RoutedEventHandler(shutdownButton_Click);
      windowMenu.SubmenuOpened += new RoutedEventHandler(windowMenu_SubmenuOpened);
      Closing += Window1_Closing;

    public void windowMenu_SubmenuOpened(object sender, RoutedEventArgs e) {
      foreach( Window window in Application.Current.Windows ) {
        MenuItem item = new MenuItem();
        item.Header = window.Title;
        item.Click += windowMenuItem_Click;
        item.Tag = window;
        item.IsChecked = window.IsActive;

    public void windowMenuItem_Click(object sender, RoutedEventArgs e) {
      Window window = (Window)((MenuItem)sender).Tag;

    public void newWindowButton_Click(object sender, RoutedEventArgs e) {
      Window window = new Window();
      window.Title = "Window " + DateTime.Now;
      window.Width = 200;
      window.Height = 100;
      statusText.Text = Application.Current.ShutdownMode.ToString();

    void shutdownButton_Click(object sender, RoutedEventArgs e) {

    void Window1_Closing(object sender, CancelEventArgs e) {
      if( MessageBox.Show("Do you really want to shut down?", "Shutting Down", MessageBoxButton.YesNo) == MessageBoxResult.No ) {
        e.Cancel = true;



Related examples in the same category

1.File menuFile menu
2.Menu and MenuItemMenu and MenuItem
3.Menu With Sub headingMenu With Sub heading
4.A main menuA main menu
5.MenuItems with CommandsMenuItems with Commands
6.Menu item with shortcut and access keyMenu item with shortcut and access key
7.Window with Menu, ToolBar, StatusBarWindow with Menu, ToolBar, StatusBar
8.MenuItem Commands And EventsMenuItem Commands And Events
9.Add MenuItem to MenuAdd MenuItem to Menu
10.MenuItem opened eventMenuItem opened event
11.Format TextBox with MenuItem: normal, bold, italicFormat TextBox with MenuItem: normal, bold, italic
12.MenuBar and ToolBarMenuBar and ToolBar
13.Add Menu to NavigationWindow ContentAdd Menu to NavigationWindow Content
14.Menu item action handlerMenu item action handler