Menu

De Banane Atomic
Aller à la navigationAller à la recherche

Menu

Xaml.png
<Window>
    <DockPanel>
        <Menu DockPanel.Dock="Top">
            <MenuItem Header="_Menu1">

                <MenuItem Header="_SousMenu1" Click="SousMenu1MenuItem_Click" />
                <Separator />

                <!-- Avec une image -->
                <MenuItem Header="_SousMenu2">
                    <MenuItem.Icon>
                        <Image Source="icon.png" />
                    </MenuItem.Icon>
                </MenuItem>

                <!-- Avec une case à cocher -->
                <MenuItem Header="_SousMenu2" IsCheckable="True" IsChecked="True" />
            </MenuItem>
Le _ dans le Header sert à définir la touche de raccourci une fois Alt pressé.

Avec des Routed Commands

MainWindow.xaml
<Window xmlns:local="clr-namespace:MonNamespace">
    <Window.CommandBindings>
        <CommandBinding Command="{x:Static local:MainWindow.MaCommande}"
                        Executed="MaCommandeExecuted"
                        CanExecute="MaCommandeCanExecute"/>
    </Window.CommandBindings>
    <DockPanel>
        <Menu DockPanel.Dock="Top">
            <MenuItem Header="_Menu1" Command="{x:Static local:MainWindow.MaCommande}">
MainWindow.xaml.cs
namespace MonNamespace
{
    public partial class MainWindow : Window
    {
        // doit être static pour pouvoir être référencée depuis le XAML avec x:Static
        public static RoutedCommand MaCommande = new RoutedCommand();

        private void MaCommandeExecuted(object sender, ExecutedRoutedEventArgs e)
        {
             // e.Parameter contient le paramètre de la commande
             // e.Source contient le composant graphique branché à la commande
        }

        private void MaCommandeCanExecute(object sender, CanExecuteRoutedEventArgs e)
        {
            e.CanExecute = true;
        }

Faire apparaître le menu avec Alt

MainWindow.xaml
<Window KeyUp="Window_KeyUp">
    <DockPanel>
        <Menu x:Name="menu" DockPanel.Dock="Top" Visibility="Collapsed">
MainWindow.xaml.cs
private void Window_KeyUp(object sender, KeyEventArgs e)
{
    if (e.Key == Key.System)
    {
        menu.Visibility = menu.Visibility == Visibility.Collapsed ? Visibility.Visible : Visibility.Collapsed;
    }
}

Binding de MenuItem

Xaml.png
<Menu DockPanel.Dock="Top">
    <MenuItem Header="Menu1" ItemsSource="{Binding MenuItemsList}">
        <MenuItem.ItemContainerStyle>
            <Style>
                <Setter Property="Header" Value="{Binding Name}"></Setter>
                <Setter Property="Command" Value="{Binding ActivateCommand}"/>
                <Setter Property="IsChecked" Value="{Binding IsActive}" />
                <Setter Property="IsCheckable" Value="True"/>
            </Style>
        </MenuItem.ItemContainerStyle>
    </MenuItem>