Необходимо было прицепить дополнительные данные к MenuItem, я решил создать потомка MenuItem с дополнительными свойствами... Очень удивлён что этот новый класс приводит к изменению внешнего вида разделителя в контекстном меню. Причём в оконнном меню всё пучком... Вот код для воспроизведения глюка:
1 using System;
2 using System.Collections.Generic;
3 using System.Windows;
4 using System.Windows.Controls;
5
6 public class MyMenuItem: MenuItem
7 {
8 private static MenuItem setHeader(MenuItem i, object h)
9 {
10 i.Header = h;
11 return i;
12 }
13
14 private static List<Control> createItems()
15 {
16 List<Control> list = new List<Control>();
17 list.Add(setHeader(new MenuItem(), "MenuItem 1"));
18 list.Add(new Separator());
19 list.Add(setHeader(new MenuItem(), "MenuItem 2"));
20 list.Add(new Separator());
21 list.Add(setHeader(new MyMenuItem(), "MyMenuItem"));
22 list.Add(new Separator());
23 list.Add(setHeader(new MenuItem(), "MenuItem 3"));
24 list.Add(new Separator());
25 list.Add(setHeader(new MenuItem(), "MenuItem 4"));
26 return list;
27 }
28
29 [STAThread]
30 public static void Main()
31 {
32 Window w = new Window();
33 StackPanel sp = new StackPanel();
34 TextBlock tb = new TextBlock();
35 tb.Text = "Compare Separator before 'MyMenuItem' in MainMenu and ContextMenu...";
36 Menu m = new Menu();
37 sp.Children.Add(m);
38 sp.Children.Add(tb);
39 w.Content = sp;
40 MenuItem mi = setHeader(new MenuItem(),"MainMenu");
41 mi.ItemsSource = createItems();
42 m.Items.Add(mi);
43
44 ContextMenu cm = new ContextMenu();
45 cm.ItemsSource = createItems();
46 w.ContextMenu = cm;
47
48 (new Application()).Run(w);
49 }
50 }