public static void CreateContextMenu(int i, Neuron n, ContextMenu cm) { cmCancelled = false; labelChanged = false; modelChanged = false; enabledChanged = false; historyChanged = false; synapsesChanged = false; chargeChanged = false; leakRateChanged = false; axonDelayChanged = false; n = MainWindow.theNeuronArray.AddSynapses(n); cm.SetValue(NeuronIDProperty, n.Id); cm.Closed += Cm_Closed; cm.Opened += Cm_Opened; cm.PreviewKeyDown += Cm_PreviewKeyDown; cmCancelled = false; cm.StaysOpen = true; //The neuron label StackPanel sp = new StackPanel { Orientation = Orientation.Horizontal, Margin = new Thickness(0, 3, 3, 3) }; sp.Children.Add(new Label { Content = "ID: " + n.id + " Label: ", VerticalAlignment = VerticalAlignment.Center, Padding = new Thickness(0) }); TextBox tb = Utils.ContextMenuTextBox(n.Label, "Label", 150); tb.TextChanged += Tb_TextChanged; sp.Children.Add(tb); sp.Children.Add(new Label { Content = "Warning:\rDuplicate Label", FontSize = 8, Name = "DupWarn", Visibility = Visibility.Hidden }); // cm.Items.Add(sp); //MenuItem mi = new MenuItem { StaysOpenOnClick = true, Header = new TextBox { Text = "Harry" } }; cm.Items.Add(new MenuItem { StaysOpenOnClick = true, Header = sp }); //The neuron model sp = new StackPanel { Orientation = Orientation.Horizontal, Margin = new Thickness(0, 3, 3, 3) }; sp.Children.Add(new Label { Content = "Model: ", Padding = new Thickness(0) }); ComboBox cb = new ComboBox() { Width = 100, Name = "Model" }; for (int index = 0; index < Enum.GetValues(typeof(Neuron.modelType)).Length; index++) { Neuron.modelType model = (Neuron.modelType)index; cb.Items.Add(new ListBoxItem() { Content = model.ToString(), ToolTip = Neuron.modelToolTip[index], Width = 100, }); } cb.SelectedIndex = (int)n.Model; cb.SelectionChanged += Cb_SelectionChanged; sp.Children.Add(cb); cm.Items.Add(new MenuItem { StaysOpenOnClick = true, Header = sp }); cm.Items.Add(new Separator()); MenuItem mi = new MenuItem(); CheckBox cbShowSynapses = new CheckBox { IsChecked = (n.leakRate > 0) || float.IsPositiveInfinity(1.0f / n.leakRate), Content = "Enabled", Name = "Enabled", }; cbShowSynapses.Checked += CbCheckedChanged; cbShowSynapses.Unchecked += CbCheckedChanged; cm.Items.Add(new MenuItem { StaysOpenOnClick = true, Header = cbShowSynapses }); cbShowSynapses = new CheckBox { IsChecked = MainWindow.arrayView.IsShowingSnapses(n.id), Content = "Show Synapses", Name = "Synapses", }; cbShowSynapses.Checked += CbCheckedChanged; cbShowSynapses.Unchecked += CbCheckedChanged; cm.Items.Add(new MenuItem { StaysOpenOnClick = true, Header = cbShowSynapses }); mi = new MenuItem(); CheckBox cbHistory = new CheckBox { IsChecked = FiringHistory.NeuronIsInFiringHistory(n.id), Content = "Record Firing History", Name = "History", }; cbHistory.Checked += CbCheckedChanged; cbHistory.Unchecked += CbCheckedChanged; cm.Items.Add(new MenuItem { StaysOpenOnClick = true, Header = cbHistory }); mi = new MenuItem(); mi.Header = "Synapses Out"; foreach (Synapse s in n.Synapses) { string targetLabel = MainWindow.theNeuronArray.GetNeuron(s.targetNeuron).Label; MenuItem synapseMenuItem = new MenuItem() { Header = s.targetNeuron.ToString().PadLeft(8) + s.Weight.ToString("F3").PadLeft(9) + " " + targetLabel, FontFamily = new FontFamily("Courier New") }; synapseMenuItem.Click += Mi_Click; synapseMenuItem.PreviewMouseRightButtonDown += SynapseMenuItem_PreviewMouseRightButtonDown; synapseMenuItem.ToolTip = "L-click -> target neuron, R-Click -> edit synapse"; mi.Items.Add(synapseMenuItem); } cm.Items.Add(mi); mi = new MenuItem(); mi.Header = "Synapses In"; foreach (Synapse s in n.SynapsesFrom) { string targetLabel = MainWindow.theNeuronArray.GetNeuron(s.targetNeuron).Label; MenuItem synapseMenuItem = new MenuItem() { Header = s.targetNeuron.ToString().PadLeft(8) + " " + s.Weight.ToString("F3").PadLeft(9) + " " + targetLabel, FontFamily = new FontFamily("Courier New") }; synapseMenuItem.Click += Mi_Click; synapseMenuItem.PreviewMouseRightButtonDown += SynapseFromMenuItem_PreviewMouseRightButtonDown1; synapseMenuItem.ToolTip = "L-click -> source neuron, R-Click -> edit synapse"; mi.Items.Add(synapseMenuItem);; } cm.Items.Add(mi); mi = new MenuItem { Header = "Paste Here" }; if (MainWindow.myClipBoard == null) { mi.IsEnabled = false; } mi.Click += Mi_Click; cm.Items.Add(mi); mi = new MenuItem { Header = "Move Here" }; if (MainWindow.arrayView.theSelection.selectedRectangles.Count == 0) { mi.IsEnabled = false; } mi.Click += Mi_Click; cm.Items.Add(mi); mi = new MenuItem(); mi.Header = "Connect Multiple Synapses"; mi.Click += Mi_Click; mi.Items.Add(new MenuItem() { Header = "From Selection to Here" }); ((MenuItem)mi.Items[mi.Items.Count - 1]).Click += Mi_Click; mi.Items.Add(new MenuItem() { Header = "From Here to Selection" }); ((MenuItem)mi.Items[mi.Items.Count - 1]).Click += Mi_Click; mi.Items.Add(new MenuItem() { Header = "Mutual Suppression" }); ((MenuItem)mi.Items[mi.Items.Count - 1]).Click += Mi_Click; cm.Items.Add(mi); if (NeuronInSelection(n.id)) { cbShowSynapses = new CheckBox { IsChecked = true, Content = "Apply changes to all neurons in selection", Name = "ApplyToSelection", }; cbShowSynapses.Checked += CbCheckedChanged; cbShowSynapses.Unchecked += CbCheckedChanged; cm.Items.Add(new MenuItem { StaysOpenOnClick = true, Header = cbShowSynapses }); } sp = new StackPanel { Orientation = Orientation.Horizontal }; Button b0 = new Button { Content = "OK", Width = 100, Height = 25, Margin = new Thickness(10) }; b0.Click += B0_Click; sp.Children.Add(b0); b0 = new Button { Content = "Cancel", Width = 100, Height = 25, Margin = new Thickness(10) }; b0.Click += B0_Click; sp.Children.Add(b0); cm.Items.Add(new MenuItem { Header = sp, StaysOpenOnClick = true }); SetCustomCMItems(cm, n, n.model); }
public static void CreateContextMenu(int i, Neuron n, ContextMenu cm) { cm.SetValue(NeuronIDProperty, n.Id); cm.Closed += Cm_Closed; cmCancelled = false; StackPanel sp = new StackPanel { Orientation = Orientation.Horizontal, Margin = new Thickness(0, 3, 3, 3) }; sp.Children.Add(new Label { Content = "Charge: ", Padding = new Thickness(0) }); if (n.Model != Neuron.modelType.FloatValue) { sp.Children.Add(new TextBox { Text = n.LastCharge.ToString("f2"), Width = 60, Name = "CurrentCharge", VerticalAlignment = VerticalAlignment.Center }); } else { sp.Children.Add(new TextBox { Text = n.CurrentCharge.ToString("f2"), Width = 60, Name = "CurrentCharge", VerticalAlignment = VerticalAlignment.Center }); } cm.Items.Add(sp); if (n.Model == Neuron.modelType.LIF) { sp = new StackPanel { Orientation = Orientation.Horizontal, Margin = new Thickness(0, 3, 3, 3) }; sp.Children.Add(new Label { Content = "Leak Rate: ", Padding = new Thickness(0) }); sp.Children.Add(new TextBox { Text = n.LeakRate.ToString("f4"), Width = 60, Name = "LeakRate", VerticalAlignment = VerticalAlignment.Center }); cm.Items.Add(sp); } MenuItem mi = new MenuItem(); mi.Header = "Neuron ID: " + n.Id; cm.Items.Add(mi); cm.Items.Add(new Separator()); mi = new MenuItem(); mi.Header = "Always Fire"; mi.Click += Mi_Click; cm.Items.Add(mi); mi = new MenuItem(); mi.Header = "Paste Here"; mi.Click += Mi_Click; cm.Items.Add(mi); mi = new MenuItem(); mi.Header = "Clipboard"; mi.Click += Mi_Click; mi.Items.Add(new MenuItem() { Header = "Paste Here" }); ((MenuItem)mi.Items[mi.Items.Count - 1]).Click += Mi_Click; mi.Items.Add(new MenuItem() { Header = "Move Here" }); ((MenuItem)mi.Items[mi.Items.Count - 1]).Click += Mi_Click; mi.Items.Add(new MenuItem() { Header = "Connect to Here" }); ((MenuItem)mi.Items[mi.Items.Count - 1]).Click += Mi_Click; mi.Items.Add(new MenuItem() { Header = "Connect from Here" }); ((MenuItem)mi.Items[mi.Items.Count - 1]).Click += Mi_Click; mi.Items.Add(new MenuItem() { Header = "Select as Target" }); ((MenuItem)mi.Items[mi.Items.Count - 1]).Click += Mi_Click; cm.Items.Add(mi); sp = new StackPanel { Orientation = Orientation.Horizontal, Margin = new Thickness(0, 3, 3, 3) }; sp.Children.Add(new Label { Content = "Label: ", Padding = new Thickness(0) }); sp.Children.Add(new TextBox { Text = n.Label, Width = 150, Name = "Label", VerticalAlignment = VerticalAlignment.Center }); cm.Items.Add(sp); sp = new StackPanel { Orientation = Orientation.Horizontal, Margin = new Thickness(0, 3, 3, 3) }; sp.Children.Add(new Label { Content = "Model: ", Padding = new Thickness(0) }); ComboBox cb = new ComboBox() { Width = 100 }; for (int index = 0; index < Enum.GetValues(typeof(Neuron.modelType)).Length; index++) { Neuron.modelType model = (Neuron.modelType)index; cb.Items.Add(new ListBoxItem() { Content = model.ToString(), ToolTip = Neuron.modelToolTip[index], Width = 100, }); } cb.SelectedIndex = (int)n.Model; cb.SelectionChanged += Cb_SelectionChanged; sp.Children.Add(cb); cm.Items.Add(sp); CheckBox cbHistory = new CheckBox { IsChecked = n.KeepHistory, Content = "Record Firing History", Name = "History", }; cbHistory.Checked += CbHistory_Checked; cbHistory.Unchecked += CbHistory_Checked; cm.Items.Add(cbHistory); mi = new MenuItem(); mi.Header = "Synapses"; mi.Click += Mi_Click; if (n.synapses == null) { n.synapses = new List <Synapse>(); } foreach (Synapse s in n.synapses) { mi.Items.Add(new MenuItem() { Header = s.targetNeuron + " " + s.Weight }); } cm.Items.Add(mi); mi = new MenuItem(); mi.Header = "Synapses In"; mi.Click += Mi_Click; if (n.synapsesFrom == null) { n.synapsesFrom = new List <Synapse>(); } foreach (Synapse s in n.synapsesFrom) { mi.Items.Add(new MenuItem() { Header = s.targetNeuron + " " + s.Weight }); } cm.Items.Add(mi); }
public static void CreateContextMenu(int i, Neuron n, ContextMenu cm) { n = MainWindow.theNeuronArray.AddSynapses(n); cm.SetValue(NeuronIDProperty, n.Id); cm.Closed += Cm_Closed; cmCancelled = false; StackPanel sp = new StackPanel { Orientation = Orientation.Horizontal, Margin = new Thickness(0, 3, 3, 3) }; sp.Children.Add(new Label { Content = "Charge: ", Padding = new Thickness(0) }); if (n.Model == Neuron.modelType.FloatValue) { sp.Children.Add(new TextBox { Text = n.CurrentCharge.ToString("f2"), Width = 60, Name = "CurrentCharge", VerticalAlignment = VerticalAlignment.Center }); } else if (n.model == Neuron.modelType.Color) { sp.Children.Add(new TextBox { Text = n.LastChargeInt.ToString("X"), Width = 60, Name = "CurrentCharge", VerticalAlignment = VerticalAlignment.Center }); } else { sp.Children.Add(new TextBox { Text = n.LastCharge.ToString("f2"), Width = 60, Name = "CurrentCharge", VerticalAlignment = VerticalAlignment.Center }); } cm.Items.Add(sp); if (n.Model == Neuron.modelType.LIF || n.model == Neuron.modelType.Random) { sp = new StackPanel { Orientation = Orientation.Horizontal, Margin = new Thickness(0, 3, 3, 3) }; sp.Children.Add(new Label { Content = "Leak Rate: ", Padding = new Thickness(0) }); sp.Children.Add(new TextBox { Text = n.LeakRate.ToString("f4"), Width = 60, Name = "LeakRate", VerticalAlignment = VerticalAlignment.Center }); cm.Items.Add(sp); } MenuItem mi = new MenuItem(); mi.Header = "Neuron ID: " + n.Id; cm.Items.Add(mi); cm.Items.Add(new Separator()); mi = new MenuItem(); mi.Header = "Always Fire"; mi.Click += Mi_Click; cm.Items.Add(mi); mi = new MenuItem(); mi.Header = "Paste Here"; mi.Click += Mi_Click; cm.Items.Add(mi); mi = new MenuItem(); mi.Header = "Clipboard"; mi.Click += Mi_Click; mi.Items.Add(new MenuItem() { Header = "Paste Here" }); ((MenuItem)mi.Items[mi.Items.Count - 1]).Click += Mi_Click; mi.Items.Add(new MenuItem() { Header = "Move Here" }); ((MenuItem)mi.Items[mi.Items.Count - 1]).Click += Mi_Click; mi.Items.Add(new MenuItem() { Header = "Connect to Here" }); ((MenuItem)mi.Items[mi.Items.Count - 1]).Click += Mi_Click; mi.Items.Add(new MenuItem() { Header = "Connect from Here" }); ((MenuItem)mi.Items[mi.Items.Count - 1]).Click += Mi_Click; mi.Items.Add(new MenuItem() { Header = "Select as Target" }); ((MenuItem)mi.Items[mi.Items.Count - 1]).Click += Mi_Click; cm.Items.Add(mi); sp = new StackPanel { Orientation = Orientation.Horizontal, Margin = new Thickness(0, 3, 3, 3) }; sp.Children.Add(new Label { Content = "Label: ", Padding = new Thickness(0) }); sp.Children.Add(new TextBox { Text = n.Label, Width = 150, Name = "Label", VerticalAlignment = VerticalAlignment.Center }); cm.Items.Add(sp); sp = new StackPanel { Orientation = Orientation.Horizontal, Margin = new Thickness(0, 3, 3, 3) }; sp.Children.Add(new Label { Content = "Model: ", Padding = new Thickness(0) }); ComboBox cb = new ComboBox() { Width = 100 }; for (int index = 0; index < Enum.GetValues(typeof(Neuron.modelType)).Length; index++) { Neuron.modelType model = (Neuron.modelType)index; cb.Items.Add(new ListBoxItem() { Content = model.ToString(), ToolTip = Neuron.modelToolTip[index], Width = 100, }); } cb.SelectedIndex = (int)n.Model; cb.SelectionChanged += Cb_SelectionChanged; sp.Children.Add(cb); cm.Items.Add(sp); CheckBox cbHistory = new CheckBox { IsChecked = FiringHistory.NeuronIsInFiringHistory(n.id), Content = "Record Firing History", Name = "History", }; cbHistory.Checked += CbHistory_Checked; cbHistory.Unchecked += CbHistory_Checked; cm.Items.Add(cbHistory); mi = new MenuItem(); mi.Header = "Synapses"; foreach (Synapse s in n.Synapses) { string targetLabel = MainWindow.theNeuronArray.GetNeuron(s.targetNeuron).Label; MenuItem synapseMenuItem = new MenuItem() { Header = s.targetNeuron.ToString().PadLeft(8) + s.Weight.ToString("F3").PadLeft(9) + " " + targetLabel, FontFamily = new FontFamily("Courier New") }; synapseMenuItem.Click += Mi_Click; synapseMenuItem.PreviewMouseRightButtonDown += SynapseMenuItem_PreviewMouseRightButtonDown; synapseMenuItem.ToolTip = "L-click -> target neuron, R-Click -> edit synapse"; mi.Items.Add(synapseMenuItem); } cm.Items.Add(mi); mi = new MenuItem(); mi.Header = "Synapses In"; foreach (Synapse s in n.SynapsesFrom) { string targetLabel = MainWindow.theNeuronArray.GetNeuron(s.targetNeuron).Label; MenuItem synapseMenuItem = new MenuItem() { Header = s.targetNeuron.ToString().PadLeft(8) + " " + s.Weight.ToString("F3").PadLeft(9) + " " + targetLabel, FontFamily = new FontFamily("Courier New") }; synapseMenuItem.Click += Mi_Click; synapseMenuItem.PreviewMouseRightButtonDown += SynapseFromMenuItem_PreviewMouseRightButtonDown1; synapseMenuItem.ToolTip = "L-click -> source neuron, R-Click -> edit synapse"; mi.Items.Add(synapseMenuItem);; } cm.Items.Add(mi); }
public static ContextMenu CreateContextMenu(int i, Neuron n, ContextMenu cm) { cmCancelled = false; labelChanged = false; toolTipChanged = false; modelChanged = false; enabledChanged = false; historyChanged = false; synapsesChanged = false; chargeChanged = false; leakRateChanged = false; axonDelayChanged = false; n = MainWindow.theNeuronArray.AddSynapses(n); cm.SetValue(NeuronIDProperty, n.Id); cm.Closed += Cm_Closed; cm.Opened += Cm_Opened; cm.PreviewKeyDown += Cm_PreviewKeyDown; cmCancelled = false; cm.StaysOpen = true; cm.Width = 300; //The neuron label MenuItem mi1 = new MenuItem { Header = "ID: " + n.id, Padding = new Thickness(0) }; cm.Items.Add(mi1); //apply to all in selection CheckBox cbApplyToSelection = new CheckBox { IsChecked = true, Content = "Apply changes to all neurons in selection", Name = "ApplyToSelection", }; cbApplyToSelection.Checked += CbCheckedChanged; cbApplyToSelection.Unchecked += CbCheckedChanged; cm.Items.Add(new MenuItem { StaysOpenOnClick = true, Header = cbApplyToSelection }); if (MainWindow.arrayView.theSelection.selectedRectangles.Count > 0) { cbApplyToSelection.IsEnabled = true; cbApplyToSelection.IsChecked = NeuronInSelection(n.id); } else { cbApplyToSelection.IsChecked = false; cbApplyToSelection.IsEnabled = false; } //label StackPanel sp = new StackPanel { Orientation = Orientation.Horizontal, }; sp.Children.Add(new Label { Content = "Label: ", Padding = new Thickness(0), VerticalAlignment = VerticalAlignment.Center, });; TextBox tb = Utils.ContextMenuTextBox(n.Label, "Label", 170); tb.TextChanged += Tb_TextChanged; sp.Children.Add(tb); sp.Children.Add(new Label { Content = "Warning: Duplicate Label", FontSize = 8, Name = "DupWarn", Visibility = Visibility.Hidden }); mi1 = new MenuItem { StaysOpenOnClick = true, Header = sp }; cm.Items.Add(mi1); //tooltip if (n.Label != "" || n.ToolTip != "") //add the tooltip textbox if needed { sp = new StackPanel { Orientation = Orientation.Horizontal }; sp.Children.Add(new Label { Content = "Tooltip: ", VerticalAlignment = VerticalAlignment.Center, Padding = new Thickness(0) }); tb = Utils.ContextMenuTextBox(n.ToolTip, "ToolTip", 150); tb.TextChanged += Tb_TextChanged; sp.Children.Add(tb); cm.Items.Add(sp); } //The neuron model sp = new StackPanel { Orientation = Orientation.Horizontal, Margin = new Thickness(0, 3, 3, 3) }; sp.Children.Add(new Label { Content = "Model: ", Padding = new Thickness(0) }); ComboBox cb = new ComboBox() { Width = 80, Name = "Model" }; for (int index = 0; index < Enum.GetValues(typeof(Neuron.modelType)).Length; index++) { Neuron.modelType model = (Neuron.modelType)index; cb.Items.Add(new ListBoxItem() { Content = model.ToString(), ToolTip = Neuron.modelToolTip[index], Width = 100, }); } cb.SelectedIndex = (int)n.Model; cb.SelectionChanged += Cb_SelectionChanged; sp.Children.Add(cb); cm.Items.Add(new MenuItem { StaysOpenOnClick = true, Header = sp }); cm.Items.Add(new Separator { Visibility = Visibility.Collapsed }); cm.Items.Add(new Separator { Visibility = Visibility.Collapsed }); MenuItem mi = new MenuItem(); CheckBox cbEnableNeuron = new CheckBox { IsChecked = (n.leakRate > 0) || float.IsPositiveInfinity(1.0f / n.leakRate), Content = "Enabled", Name = "Enabled", }; cbEnableNeuron.Checked += CbCheckedChanged; cbEnableNeuron.Unchecked += CbCheckedChanged; cm.Items.Add(new MenuItem { StaysOpenOnClick = true, Header = cbEnableNeuron }); CheckBox cbShowSynapses = new CheckBox { IsChecked = MainWindow.arrayView.IsShowingSynapses(n.id), Content = "Show Synapses", Name = "Synapses", }; cbShowSynapses.Checked += CbCheckedChanged; cbShowSynapses.Unchecked += CbCheckedChanged; cm.Items.Add(new MenuItem { StaysOpenOnClick = true, Header = cbShowSynapses }); mi = new MenuItem(); CheckBox cbHistory = new CheckBox { IsChecked = FiringHistory.NeuronIsInFiringHistory(n.id), Content = "Record Firing History", Name = "History", }; cbHistory.Checked += CbCheckedChanged; cbHistory.Unchecked += CbCheckedChanged; cm.Items.Add(new MenuItem { StaysOpenOnClick = true, Header = cbHistory }); mi = new MenuItem { Header = "Clear Synapses" }; mi.Click += Mi_Click; cm.Items.Add(mi); cm.Items.Add(new Separator()); cm.Items.Add(new Separator()); mi = new MenuItem(); mi.Header = "Synapses Out"; mi.Width = 250; mi.HorizontalAlignment = HorizontalAlignment.Left; foreach (Synapse s in n.Synapses) { AddSynapseEntryToMenu(mi, s); } cm.Items.Add(mi); mi = new MenuItem(); mi.Header = "Synapses In"; mi.Width = 250; mi.HorizontalAlignment = HorizontalAlignment.Left; foreach (Synapse s in n.SynapsesFrom) { AddSynapseEntryToMenu(mi, s); } cm.Items.Add(mi); mi = new MenuItem { Header = "Paste Here" }; if (!XmlFile.WindowsClipboardContainsNeuronArray()) { mi.IsEnabled = false; } mi.Click += Mi_Click; cm.Items.Add(mi); mi = new MenuItem { Header = "Move Here" }; if (MainWindow.arrayView.theSelection.selectedRectangles.Count == 0) { mi.IsEnabled = false; } mi.Click += Mi_Click; cm.Items.Add(mi); mi = new MenuItem(); mi.Header = "Connect Multiple Synapses"; mi.Width = 250; mi.HorizontalAlignment = HorizontalAlignment.Left; mi.Click += Mi_Click; mi.Items.Add(new MenuItem() { Header = "From Selection to Here" }); ((MenuItem)mi.Items[mi.Items.Count - 1]).Click += Mi_Click; mi.Items.Add(new MenuItem() { Header = "From Here to Selection" }); ((MenuItem)mi.Items[mi.Items.Count - 1]).Click += Mi_Click; mi.Items.Add(new MenuItem() { Header = "Mutual Suppression" }); ((MenuItem)mi.Items[mi.Items.Count - 1]).Click += Mi_Click; cm.Items.Add(mi); sp = new StackPanel { Orientation = Orientation.Horizontal }; Button b0 = new Button { Content = "OK", Width = 100, Height = 25, Margin = new Thickness(10) }; b0.Click += B0_Click; sp.Children.Add(b0); b0 = new Button { Content = "Cancel", Width = 100, Height = 25, Margin = new Thickness(10) }; b0.Click += B0_Click; sp.Children.Add(b0); cm.Items.Add(new MenuItem { Header = sp, StaysOpenOnClick = true }); SetCustomCMItems(cm, n, n.model); return(cm); }