2016-06-15 1 views
0

J'ai créé un menu latéral dans un fichier WPF. Voici le XAML:Afficher dynamiquement qu'un menu latéral a été sélectionné

 <Rectangle VerticalAlignment="Stretch" Width="1" Margin="2" Stroke="Black" /> 
     <MenuItem Header="Remove Headers" Click="MenuItem_Click_RH" /> 
     <MenuItem Header="Get Headers" Click="MenuItem_Click_GH" /> 
     <MenuItem Header="Count Delimiters" Click="MenuItem_Click_CNTD" /> 
     <Separator Style="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}" /> 
     <MenuItem Header="Close" Click="MenuItem_Click_Close" /> 
    </Menu> 

Voici mon code de clic:

 private void MenuItem_Click_CNTD(object sender, RoutedEventArgs e) 
     { 
      //*** Count Delimiters Menu Click *** 

      // ... Cast sender object. 
      System.Windows.Controls.MenuItem item = sender as System.Windows.Controls.MenuItem; 
      // ... Change Title of this window. 
      Title = "Process " + item.Header + " Files"; 


      lblDCTitle.Content = "Process to get mumber of delimiters in a large file."; 
      grdHeaderRows.Visibility = Visibility.Hidden; 
      mnuSideMenu.Height = 360; 
      grdMain.Height = 360; 
      grdDelimiterCount.Height = 400; 
      grdDelimiterCount.Visibility = Visibility.Visible; 
     } 

Tout cela fonctionne bien, mais je voudrais souligner l'élément de menu qui a été cliqué . Je ne peux pas trouver de code pour le faire. Quelqu'un a des idées?

Merci

Répondre

0

Merci #Alexandru Turcan pour votre suggestion, j'ai pu. fais comme ça, je fais pas beaucoup d'éléments de menu et cela fonctionne parfaitement pour moi. J'ai mis ce code dans chacune de mes routines menu_click.

miRH.Background = SystemColors.ControlDarkBrush; 
miGH.Background = new SolidColorBrush(Color.FromArgb(100, 232, 249, 246)); 
miCD.Background = new SolidColorBrush(Color.FromArgb(100, 232, 249, 246)); 
0

Les choses d'abord. Comment voulez-vous mettre en évidence l'article? Si vous voulez changer son pinceau d'arrière-plan La première chose qui vient à l'esprit est de définir le pinceau d'arrière-plan du menuitem cliqué, mais ce sera super codé en dur, car vous devez définir le pinceau d'arrière-plan dans chaque gestionnaire d'événement click.

Une autre version plus optimisée de la première option consiste à:

  • ai 2 brosses définies (un defaultColor, autre selectedColor);
  • que tous les éléments de menu dans une List<MenuItems> (vous pouvez les obtenir par de YourMenu.Children propriété
  • Vous avez déjà un eventhandler souscrit Vous pouvez le faire comme ça tous les élément de menu:... YourMenuItemName.Click+=YourEventHanderName Le handel événement va changer la couleur de l'élément cliqué sur le SelectedColor et à la brosse DefaultColor pour le reste de MenuItems;.

Jolie hardcoded, mais en quelque sorte plus dynamique puis la version précédente