mcpField
S
syncfusion-wpf-radial-menu

syncfusion-wpf-radial-menu

github.com/syncfusion设计与 UI5153 次安装2 周前更新
代码仓库

关于 syncfusion-wpf-radial-menu

此技能介绍如何在 WPF 应用中实现 Syncfusion 的 SfRadialMenu,涵盖层级圆形菜单、数据绑定、命令、布局和样式配置。

主要功能

  1. 01层级式径向导航
  2. 02将菜单项绑定到集合
  3. 03配置布局和分段
  4. 04绑定命令及参数
  5. 05自定义图标和外观
  6. 06创建径向调色板

适用场景

  1. 01构建编辑器上下文菜单
  2. 02创建图形工具面板
  3. 03提供径向颜色选择器
  4. 04添加适合触控的自助终端导航

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/syncfusion/wpf-ui-components-skills --skill syncfusion-wpf-radial-menu

安装后在 Claude Code 中输入/syncfusion-wpf-radial-menu确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
appearance-and-styling.md
color-palette.md
getting-started.md
icons.md
layout-types.md
populating-items.md
tooltips.md

详细介绍

实现 Syncfusion WPF Radial Menu

Syncfusion WPF Radial Menu(SfRadialMenu) 以圆形布局显示分层菜单,在相同空间中展示的菜单项比传统菜单更多。它非常适合上下文菜单、工具调色板和支持触控的界面。

何时使用此技能

在用户需要以下功能时使用此技能:

  • 在 WPF 应用程序中实现径向菜单(圆形菜单布局)
  • 创建支持分层圆形导航的上下文菜单
  • 在中心点周围以圆形布局显示菜单项
  • 实现径向模式的逐级深入导航
  • 创建采用径向菜单结构的颜色调色板
  • 为自助服务终端或平板应用程序构建适合触控的圆形菜单
  • 与传统线性菜单相比,在相同空间中显示更多菜单选项

组件概述

SfRadialMenu 是一种圆形菜单控件,可将菜单项围绕中心点径向排列。它支持:

  • 支持逐级深入的分层导航
  • 绑定业务对象集合
  • 自定义和默认布局模式
  • 自定义中心图标和菜单项图标
  • 丰富的外观和样式选项
  • 使用 SfRadialColorItem 支持颜色调色板
  • 工具提示配置
  • 命令绑定和事件处理

命名空间: Syncfusion.Windows.Controls.Navigation
程序集: Syncfusion.SfRadialMenu.WPF


文档与导航指南

入门

📄 阅读: references/getting-started.md

  • 命名空间和程序集设置
  • 基本 XAML 和代码隐藏实现
  • 使用 Show() 和 Close() 方法打开和关闭菜单
  • 事件处理:Opened、Closed、Navigating
  • 用于设置初始状态的 IsOpen 属性
  • 使用 SfSkinManager 支持主题
填充项和数据绑定

📄 阅读: references/populating-items.md

  • 将 ItemsSource 绑定到业务对象集合
  • 用于显示标题文本的 DisplayMemberPath
  • 用于命令绑定的 CommandPath
  • 用于自定义项外观的 ItemTemplate
  • 用于跟踪导航的 DrillDownItem
  • 用于手动旋转的 EnableFreeRotation
  • Command 和 CommandParameter 属性
  • CloseOnExecute 行为
  • CheckMode 选项(None、CheckBox、Radio)
  • 用于单选按钮组的 GroupName
  • 用于复选框/单选按钮状态的 IsChecked
  • SfRadialMenuItem 事件(Click、Checked、UnChecked)
布局配置

📄 阅读: references/layout-types.md

  • 默认布局类型(自动分段)
  • 通过 VisibleSegmentsCount 设置自定义布局类型
  • 用于精确定位项的 SegmentIndex
  • 控制分段分布
  • 布局类型选择指南
图标和视觉元素

📄 阅读: references/icons.md

  • 用于自定义菜单中心的 Center Icon 属性
  • 用于设置菜单项图标的 SfRadialMenuItem Icon 属性
  • 使用 Image 元素和自定义 UIElements
  • 图标大小和拉伸选项
外观和样式

📄 阅读: references/appearance-and-styling.md

  • 用于设置菜单大小的 RadiusX 和 RadiusY
  • 用于设置内圆大小的 CenterRimRadiusFactor
  • 圆环画刷:RimBackground、RimActiveBrush、RimInactiveBrush、RimHoverBrush
  • 用于显示/隐藏展开箭头的 IsExpanderVisible
  • 用于设置外圆环厚度的 RimRadiusFactor
  • 单项自定义:MenuBackgroundColor、MenuMouseOverBackgroundColor
  • ShowMouseOverStyle 属性
  • 用于导航按钮的 CenterBackButtonForeground
  • 分隔符样式:SeparatorBackground、SeparatorWidth
  • 描边属性:StrokeThickness、MouseOverRimStrokeThickness
  • 用于高级悬停自定义的 MouseOverRimStyle
工具提示

📄 阅读: references/tooltips.md

  • 用于设置项工具提示的 ToolTip 属性
  • ToolTipPlacement 选项(None、Left、Top、Right、Bottom)
  • 相对于菜单定位工具提示
颜色调色板

📄 阅读: references/color-palette.md

  • 使用 SfRadialColorItem 选择颜色
  • 创建分层颜色调色板
  • 使用嵌套颜色项表示颜色变体
  • 构建颜色选择器界面

快速入门示例

在 XAML 中创建基本径向菜单
<Window xmlns:navigation="clr-namespace:Syncfusion.Windows.Controls.Navigation;assembly=Syncfusion.SfRadialMenu.Wpf">
    <Grid>
        <navigation:SfRadialMenu IsOpen="True">
            <navigation:SfRadialMenuItem Header="Bold"/>
            <navigation:SfRadialMenuItem Header="Cut"/>
            <navigation:SfRadialMenuItem Header="Copy"/>
            <navigation:SfRadialMenuItem Header="Paste"/>
        </navigation:SfRadialMenu>
    </Grid>
</Window>
在代码隐藏中创建基本径向菜单
using Syncfusion.Windows.Controls.Navigation;

SfRadialMenu radialMenu = new SfRadialMenu();
radialMenu.IsOpen = true;

radialMenu.Items.Add(new SfRadialMenuItem() { Header = "Bold" });
radialMenu.Items.Add(new SfRadialMenuItem() { Header = "Cut" });
radialMenu.Items.Add(new SfRadialMenuItem() { Header = "Copy" });
radialMenu.Items.Add(new SfRadialMenuItem() { Header = "Paste" });
带子项的分层菜单
<navigation:SfRadialMenu IsOpen="True">
    <navigation:SfRadialMenuItem Header="Format">
        <navigation:SfRadialMenuItem Header="Bold"/>
        <navigation:SfRadialMenuItem Header="Italic"/>
        <navigation:SfRadialMenuItem Header="Underline"/>
    </navigation:SfRadialMenuItem>
    <navigation:SfRadialMenuItem Header="Edit">
        <navigation:SfRadialMenuItem Header="Cut"/>
        <navigation:SfRadialMenuItem Header="Copy"/>
        <navigation:SfRadialMenuItem Header="Paste"/>
    </navigation:SfRadialMenuItem>
    <navigation:SfRadialMenuItem Header="Undo"/>
    <navigation:SfRadialMenuItem Header="Redo"/>
</navigation:SfRadialMenu>

常见模式

单击按钮时打开菜单
<Grid>
    <navigation:SfRadialMenu x:Name="radialMenu">
        <navigation:SfRadialMenuItem Header="Bold"/>
        <navigation:SfRadialMenuItem Header="Copy"/>
        <navigation:SfRadialMenuItem Header="Paste"/>
    </navigation:SfRadialMenu>
    
    <Button Content="Open Menu" Click="OpenMenu_Click"/>
</Grid>
private void OpenMenu_Click(object sender, RoutedEventArgs e)
{
    radialMenu.Show();
}
使用业务对象进行数据绑定
// Model
public class EditorCommand
{
    public string Name { get; set; }
    public string IconPath { get; set; }
    public ICommand Command { get; set; }
}

// ViewModel
public class EditorViewModel
{
    public List<EditorCommand> Commands { get; set; }
    
    public EditorViewModel()
    {
        Commands = new List<EditorCommand>
        {
            new EditorCommand { Name = "Bold", IconPath = "bold.png" },
            new EditorCommand { Name = "Copy", IconPath = "copy.png" },
            new EditorCommand { Name = "Paste", IconPath = "paste.png" }
        };
    }
}
<navigation:SfRadialMenu IsOpen="True" 
                         ItemsSource="{Binding Commands}"
                         DisplayMemberPath="Name"
                         CommandPath="Command"/>
使用特定位置进行自定义布局
<navigation:SfRadialMenu IsOpen="True" 
                         LayoutType="Custom" 
                         VisibleSegmentsCount="8">
    <navigation:SfRadialMenuItem Header="Item 1" SegmentIndex="0"/>
    <navigation:SfRadialMenuItem Header="Item 2" SegmentIndex="2"/>
    <navigation:SfRadialMenuItem Header="Item 3" SegmentIndex="4"/>
    <navigation:SfRadialMenuItem Header="Item 4" SegmentIndex="6"/>
</navigation:SfRadialMenu>
使用边缘颜色设置样式
<navigation:SfRadialMenu IsOpen="True"
                         RimBackground="LightBlue"
                         RimActiveBrush="Orange"
                         RimHoverBrush="DarkOrange"
                         CenterRimRadiusFactor="0.3">
    <navigation:SfRadialMenuItem Header="Bold"/>
    <navigation:SfRadialMenuItem Header="Copy"/>
    <navigation:SfRadialMenuItem Header="Paste"/>
</navigation:SfRadialMenu>
带命令和参数的菜单项
<navigation:SfRadialMenu IsOpen="True">
    <navigation:SfRadialMenuItem Header="Bold"
                                 Command="{Binding BoldCommand}"
                                 CommandParameter="Bold"
                                 CloseOnExecute="True"/>
    <navigation:SfRadialMenuItem Header="Copy"
                                 Command="{Binding CopyCommand}"
                                 CommandParameter="Copy"
                                 CloseOnExecute="True"/>
</navigation:SfRadialMenu>

主要属性和事件

SfRadialMenu 属性
属性类型描述
IsOpenbool获取或设置径向菜单是否已打开
ItemsSourceIEnumerable用于数据绑定的业务对象集合
DisplayMemberPathstring菜单项标题的属性路径
CommandPathstring菜单项命令的属性路径
LayoutTypeLayoutType默认或自定义布局模式
VisibleSegmentsCountint自定义布局中的分段数
EnableFreeRotationbool允许手动旋转菜单
RadiusXdouble菜单的水平半径
RadiusYdouble菜单的垂直半径
RimBackgroundBrush外缘背景颜色
RimActiveBrushBrush活动展开器的外缘颜色
RimHoverBrushBrush悬停状态下的外缘颜色
CenterRimRadiusFactordouble内圆大小(0.0 至 1.0)
SfRadialMenuItem 属性
属性类型描述
Headerobject菜单项中显示的内容
IconUIElement菜单项的自定义图标
CommandICommand单击时执行的命令
CommandParameterobject传递给命令的参数
SegmentIndexint自定义布局模式中的位置
CloseOnExecutebool单击菜单项后关闭菜单
CheckModeCheckModeNone、CheckBox 或 Radio 行为
IsCheckedboolCheckBox/Radio 的选中状态
GroupNamestring单选按钮组名称
ToolTipstring工具提示文本
ToolTipPlacementPlacement工具提示位置
MenuBackgroundColorBrush菜单项背景颜色
事件
事件描述
Opened径向菜单打开时触发
Closed径向菜单关闭时触发
Navigating导航到子项时触发(可取消)
Click (MenuItem)单击菜单项时触发
Checked (MenuItem)选中 CheckBox/Radio 菜单项时触发
UnChecked (MenuItem)取消选中 CheckBox 菜单项时触发

常见用例

1. 文本编辑器的上下文菜单

创建一个包含格式选项(粗体、斜体、下划线、字号、颜色)的径向菜单,并在右键单击时显示。

2. 图形编辑器工具栏

以圆形布局实现工具选择器,提供绘图工具(钢笔、画笔、橡皮擦、形状)。

3. 径向布局的颜色选择器

使用 SfRadialColorItem 构建颜色调色板,第一层显示原色,第二层显示色调。

4. 支持触控的自助服务终端导航

为自助服务终端应用设计便于触控的导航菜单,利用圆形布局提升可访问性。

5. 带子命令的命令面板

创建分层命令菜单,其中顶层菜单项代表类别,子项则是具体命令。

6. 快捷操作菜单

实现一个浮动操作按钮,单击后打开包含常用操作(编辑、删除、分享、更多)的径向菜单。


实现指南

当用户想要实现径向菜单时:

  1. 从基础开始 → 引导他们阅读 getting-started.md,了解设置和基本实现
  2. 对于数据绑定 → 引导他们查看 populating-items.md,了解 ItemsSource、模板和命令
  3. 对于精确的布局控制 → 向他们介绍 layout-types.md,了解 Custom 布局和 SegmentIndex
  4. 对于视觉自定义 → 指引他们查看 icons.md 和 appearance-and-styling.md
  5. 对于颜色选择 UI → 引导他们查看 color-palette.md,了解 SfRadialColorItem 的用法
  6. 对于工具提示 → 请他们参考 tooltips.md,了解工具提示配置

始终考虑:

  • 空间限制:径向菜单能在有限空间内展示更多项目
  • 触控与鼠标:触控界面应使用更大的半径
  • 层级深度:为保证易用性,将菜单层级控制在 2-3 层
  • 项目数量:每层的理想范围为 4-8 个项目
  • 视觉反馈:使用 RimHoverBrush 和 MenuMouseOverBackgroundColor 提供清晰的悬停状态

评论

支持 Markdown