MenuItem agregado causa programáticamente un error de enlace

Tengo un menu principalmnuMainMenu que consta de varios submenús. Uno de los submenús.mnuMostRecentDirs es otro menú que tiene sus elementos generados en tiempo de ejecución, utilizando la propiedad ItemSource vinculada a un ObservableCollection. Básicamente, se muestra una lista de las carpetas utilizadas más recientemente.

El problema es que los elementos de menú agregados generan dinámicamente el siguiente error de enlace de datos:

System.Windows.Data Error: 4: No se puede encontrar el origen para el enlace con la referencia 'RelativeSource FindAncestor, AncestorType =' System.Windows.Controls.ItemsControl ', AncestorLevel =' 1 ''. BindingExpression: Path = HorizontalContentAlignment; DataItem = null; el elemento de destino es 'MenuItem' (Nombre = ''); la propiedad de destino es 'HorizontalContentAlignment' (tipo 'HorizontalAlignment')

La declaración XAML del menú principal es algo así:

 <!-- Main Menu -->
 <Menu x:Name="mnuMainMenu" Height="Auto" IsMainMenu="True">

    <!--- ... more menu declarations before ... -->

    <MenuItem x:Name="mnuitemWorkDirs" Header="Directories">
       <MenuItem x:Name="mnuNewDir"
                 Header="New" 
                 Style="{StaticResource MenuItem}" 
                 Command="{x:Static cmds:Commands.NewDirectory}" />
       <MenuItem x:Name="mnuCurrentDir"
                 Header="Current" 
                 Style="{StaticResource MenuItem}"
                 Command="{x:Static cmds:Commands.CurrentDirectory}" />
       <MenuItem x:Name="mnuMostRecentDirs" 
                 Header="Recent Directories.."
                 Style="{StaticResource MenuItem}"
                 ItemsSource="{Binding ElementName=theMain, Path=MostRecentFoldersList}" />
    </MenuItem>

    <!--- ... more menu declarations after ... -->
 </Menu>

Y el siguiente código agrega carpetas a la colección observable en tiempo de ejecución:

    private void PopulateMostRecentFoldersList(string[] paths) 
    {
        MostRecentFoldersList.Clear();

        if (paths == null)
           return;

        foreach (var fullPath in paths)
        {                                        
            var mi = new MenuItem();
            mi.Command = Commands.ChooseWorkingDirectory;
            mi.CommandParameter = fullPath;

            string name = System.IO.Path.GetFileName(fullPath);

            mi.Header = name.ToUpper();                

            // removing this style completely
            //     or manually setting the HorizontalContentAlignment property here 
            //     prevents the binding error from happening
            mi.Style = (Style)FindResource("MenuItem");                    

            MostRecentFoldersList.Add(mi);
        }
    }

Pude rastrear el problema hasta un enlace declarado en el estilo para MenuItem que no se declaró en mi aplicación. Supongo que es el estilo predeterminado para los elementos del menú ...

Ninguno de los otros elementos del menú parece tener problemas de enlace con el mismo estilo que se aplica a todos.

Así que estoy pensando que el problema debe ser mi enfoque para agregar dinámicamente los elementos de menú. Más específicamente, parece que el estilo se aplica a MenuItem antes de que el elemento se agregue a ItemsControl.

Hasta ahora, solo pude configurar la propiedad HorizontalContentAlignment en el código, en el elemento MenuItem antes de agregarla a la colección observable, pero eso es solo una curita y es solo una máscara del verdadero problema.

Respuestas a la pregunta(2)

Su respuesta a la pregunta