动态显示已选择侧面菜单

Dynamically show that a side menu has been selected

我在 WPF 中创建了一个侧边菜单。这是 xaml:

        <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>

这是我的点击代码:

        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;
        }

一切正常,但我想突出显示被单击的菜单项。我找不到执行此操作的代码。有人有什么想法吗?

谢谢

要事第一。你想如何突出显示该项目?如果你想改变它的背景画笔首先想到的是设置点击menuitem的背景画笔,但这将是超级硬编码,因为你必须在每个单击事件处理程序。

第一个选项的另一个更优化版本是:

  • 定义了 2 个画笔(一个 DefaultColor,另一个 SelectedColor);
  • 将所有菜单项放在 List<MenuItems> 中(您可以从 YourMenu.Children 属性 中获取它们。
  • 让事件处理程序订阅每个菜单项。你可以这样做:YourMenuItemName.Click+=YourEventHanderName。 事件 handel 会将单击项目的颜色更改为 SelectedColor,并为其余 MenuItems 更改为 DefaultColor 画笔;

相当硬编码,但不知何故比以前的版本更动态。

感谢#Alexandru Turcan 的建议。我能够以这种方式做到这一点,我没有很多菜单项,这对我来说非常适合。我将此代码放入我的每个 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));