动态显示已选择侧边菜单

时间:2016-06-15 12:13:05

标签: c# wpf menuitem 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;
        }

这一切都很好,但我想突出显示点击的菜单项。我找不到代码来做这件事。有人有什么想法吗?

谢谢

2 个答案:

答案 0 :(得分:0)

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

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

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

相当硬编码,但在某种程度上比先前版本更具动态性。

答案 1 :(得分:0)

感谢#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));