提问人:ElectricFrankincense 提问时间:9/18/2023 最后编辑:CraigElectricFrankincense 更新时间:9/18/2023 访问量:29
WPF - 当 MenuItem 链接到的页面处于活动状态时(而不是在 MouseOver 时)更改其背景颜色
WPF - Change background color of MenuItem when the page it links to is active (not when MouseOver)
问:
如果 MenuItem 链接到的页面是我当前所在的页面,我想在 WPF 中更改它的背景颜色。我已经弄清楚了如何在 MouseOver 时更改 MenuItem,并认为对于活动页面来说,这将是一个类似的过程。不幸的是,我在搜索此问题时在此处看到的所有链接都解决了 MouseOver 的问题,而不是活动页面的问题。
我正在考虑在代码隐藏中设置“IsFocused”触发器,但这似乎不起作用,因为 IsFocused 是只读的,我不确定这是否是正确的属性。
<StackPanel Name="spMainNav">
<StackPanel.Resources>
<ControlTemplate x:Key="VsMenuSub" TargetType="MenuItem">
<StackPanel>
<Label Content="{TemplateBinding Header}" Foreground="White" />
<StackPanel.Style>
<Style TargetType="StackPanel">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Red" />
</Trigger>
<!--Don't know where to set this in code-behind?-->
<Trigger Property="IsFocused" Value="True">
<Setter Property="Background" Value="DarkRed" />
</Trigger>
</Style.Triggers>
</Style>
</StackPanel.Style>
</StackPanel>
</ControlTemplate>
</StackPanel.Resources>
<MenuItem Name="ProjectList" Header="Project List" Template="{StaticResource VsMenuSub}" Click="ProjectList_Click" />
<MenuItem Header="About" Template="{StaticResource VsMenuSub}" Click="About_Click" />
<MenuItem Header="Exit" Template="{StaticResource VsMenuSub}" Click="Exit_Click" />
</StackPanel>
我能够修改活动链接的标题文本(在开头附加两个星号)。我以为我可以这样设置背景颜色,但我不知道该怎么做。将 MenuItem 的 Background 字段设置为画笔不起作用。
Public Shared Sub HighlightMenuItem(sender As MenuItem)
Dim sp As StackPanel = sender.Parent
Dim bc As New BrushConverter
sp.Background = bc.ConvertFrom("#36637C")
Dim thisMI As MenuItem = sender
Dim controlCount As Integer = VisualTreeHelper.GetChildrenCount(sp)
For i As Integer = 0 To controlCount - 1
Dim c = VisualTreeHelper.GetChild(sp, i)
If TypeOf c Is MenuItem Then
Dim mi As MenuItem = c
If mi.Header = thisMI.Header Then
mi.Header = "** " & mi.Header
' This doesn't work
mi.Background = Brushes.Blue
End If
End If
Next
End Sub
答: 暂无答案
评论