Cuando Ato elementos de menú con un ObservableCollection, sólo el área "interior" de la Menultem se puede hacer clic:¿Cómo puedo vincular una ObservableCollection de ViewModels a un MenuItem?
alt text http://tanguay.info/web/external/mvvmMenuItems.png
En mi Ver que tienen este menú:
<Menu>
<MenuItem
Header="Options" ItemsSource="{Binding ManageMenuPageItemViewModels}"
ItemTemplate="{StaticResource MainMenuTemplate}"/>
</Menu>
Entonces Lo enlace con este DataTemplate:
<DataTemplate x:Key="MainMenuTemplate">
<MenuItem
Header="{Binding Title}"
Command="{Binding DataContext.SwitchPageCommand,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Menu}}}"
Background="Red"
CommandParameter="{Binding IdCode}"/>
</DataTemplate>
Puesto que cada modelo de vista en los ObservableCollection ManageMenuPageItemViewModels tiene una propiedad Título y CÓDIGO ID, el código anterior funciona bien a primera vista.
Sin embargo, el problema es que el MenuItem en el DataTemplate es en realidad dentro otro MenuItem (como si se está obligado dos veces) de modo que en el DataTemplate anteriormente con Antecedentes =" Rojo " hay un cuadro rojo dentro de cada elemento de menú y solo se puede hacer clic en esta área, no toda el área del elemento del menú (por ejemplo, si el usuario hace clic en el área donde está o hacia la derecha o izquierda del cl interior área indescifrable, entonces no pasa nada, que, si no tiene un color separado, es muy confuso.)
¿Cuál es la forma correcta de encuadernar los artículos de menú a una colección observable de modelos de vista para que todo el área dentro de cada elemento de menú sea clicable?
ACTUALIZACIÓN:
Así que hizo los siguientes cambios en función de consejo abajo y ahora tienen la siguiente:
alt text http://tanguay.info/web/external/mvvmMenuItemsYellow.png
sólo tengo un TextBlock dentro de mi DataTemplate, pero todavía no puedo "colorear toda la Menultem", pero sólo el TextBlock:
<DataTemplate x:Key="MainMenuTemplate">
<TextBlock Text="{Binding Title}"/>
</DataTemplate>
Y puse el Comando de unión en Menu.ItemCo ntainerStyle pero no se activan ahora:
<Menu DockPanel.Dock="Top">
<Menu.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Background" Value="Yellow"/>
<Setter Property="Command" Value="{Binding DataContext.SwitchPageCommand,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Menu}}}"/>
<Setter Property="CommandParameter" Value="{Binding IdCode}"/>
</Style>
</Menu.ItemContainerStyle>
<MenuItem
Header="MVVM" ItemsSource="{Binding MvvmMenuPageItemViewModels}"
ItemTemplate="{StaticResource MainMenuTemplate}"/>
<MenuItem
Header="Application" ItemsSource="{Binding ApplicationMenuPageItemViewModels}"
ItemTemplate="{StaticResource MainMenuTemplate}"/>
<MenuItem
Header="Manage" ItemsSource="{Binding ManageMenuPageItemViewModels}"
ItemTemplate="{StaticResource MainMenuTemplate}"/>
</Menu>
+1 - muy bueno para el ejemplo completo con Separadores y todo. –
Tengo un diseño muy similar y todo funciona, excepto para mostrar el separador. Si cambio la plantilla a , entonces veo "Separador" donde debería estar el separador. Pero cuando trato de usar la plantilla como en tu respuesta, no se muestra nada. Intenté y luego el separador es visible, pero quiero el estilo predeterminado con el ancho establecido dinámicamente por el ancho del menú. ¿Se supone que debo definir SeparatorStyleKey en alguna parte? Busqué en línea pero no pude encontrar nada que me ayudó ...¡Gracias! –
Dina