0

代码:

<telerik:RadMenuItem Header="Home" x:Name="radMenuHome" />

如果选择了 radmenuitem,如何为其应用颜色?我想让选定的菜单项为灰色。谢谢。

4

2 回答 2

1

我不知道这个RadMenuItem类,但我只能假设它扩展了这个MenuItem类。如果是这种情况,那么这个答案应该仍然有意义。WPFMenuItem中有我称之为错误的东西......这个简短的例子演示了这一点:

<Menu>
    <Menu.Resources>
        <Style TargetType="{x:Type MenuItem}">
            <Style.Triggers>
                <Trigger Property="MenuItem.IsHighlighted" Value="True">
                    <Setter Property="MenuItem.Foreground" Value="Red" />
                    <Setter Property="MenuItem.Background" Value="Black" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </Menu.Resources>
    <MenuItem Header="One" />
    <MenuItem Header="Two">
        <MenuItem Header="Three" />
    </MenuItem>
</Menu>

如您所见,当您将鼠标悬停在s上时,MenuItem.Foreground正确的更改为 ,但没有。这是因为定义默认值的方式。您可以在 MSDN 上的菜单样式和模板页面中找到此默认模板。RedMenuItemBackgroundMenuItem Controltemplate

因此,实现您想要的正确方法是为基于链接页面的默认值定义一个新ControlTemplate的。MenuItem为了使它对您来说更棘手,您实际上会ControlTemplate在默认值中找到四个 s ......这些是用于TopLevelHeader,TopLevelItemSubmenuHeaderSubmenuItem因此您实际上可以不同地设置顶级和 childMenuItem的样式。

无论如何,查看这些ControlTemplates,您应该看到以下内容Trigger(来自链接页面):

<Trigger Property="IsHighlighted"
         Value="true">
  <Setter Property="Background"
          TargetName="Border">
    <Setter.Value>
      <LinearGradientBrush StartPoint="0,0"
                           EndPoint="0,1">
        <LinearGradientBrush.GradientStops>
          <GradientStopCollection>
            <GradientStop Color="{StaticResource ControlLightColor}" />
            <GradientStop Color="{StaticResource ControlMouseOverColor}"
                          Offset="1.0" />
          </GradientStopCollection>
        </LinearGradientBrush.GradientStops>
      </LinearGradientBrush>

    </Setter.Value>
  </Setter>
</Trigger>

改变Setter.Value这里应该有你想要的效果,但你需要做ControlTemplate你找到它的所有 s。我给你的最后一个提示是,在定义 new ControlTemplates 时,你应该从默认 XAML 开始,然后编辑并且只有在您看到它工作并且控件看起来默认情况下才进行更改。此外,请继续运行该项目,看看它是否仍然适用于您所做的每一次更改。祝你好运。


更新>>>

我刚刚找到了Jim Nuzzi 博客的WPF XAML MenuItem Styles页面,其中进一步解释了为您自定义 WPFMenuMenuItem类。

于 2014-03-19T14:32:05.200 回答
0

试试这个(仅适用于 web/.NET 场景):

protected void RadMenu1_ItemDataBound(object sender, Telerik.Web.UI.RadMenuEventArgs e)
{
    if (e.Item.NavigateUrl == Request.Url.LocalPath)
    {
        e.Item.ForeColor = System.Drawing.Color.White;
        e.Item.BackColor = System.Drawing.Color.Gray;
    }
}

注意:将 OnItemDataBound="RadMenu1_ItemDataBound" 添加到 Telerik:RadMenu 标签

于 2014-03-19T12:00:05.243 回答