动态显示已选择侧面菜单
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));
我在 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));