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項目のクリック後にメニューを閉じます
CheckModeCheckModeなし、チェックボックス、またはラジオボタンの動作
IsCheckedboolチェックボックス/ラジオボタンのチェック状態
GroupNamestringラジオボタングループ名
ToolTipstringツールチップのテキスト
ToolTipPlacementPlacementツールチップの位置
MenuBackgroundColorBrush項目の背景色
イベント
イベント説明
Opened放射状メニューが開いたときに発生します
Closed放射状メニューが閉じたときに発生します
Navigatingサブ項目への移動時に発生します(キャンセル可能)
Click(MenuItem)メニュー項目がクリックされたときに発生します
Checked(MenuItem)チェックボックス/ラジオボタン項目がチェックされたときに発生します
UnChecked(MenuItem)チェックボックス項目のチェックが外されたときに発生します

一般的なユースケース

1. テキストエディター用のコンテキストメニュー

太字、斜体、下線、フォントサイズ、色などの書式設定オプションを含む放射状メニューを作成し、右クリック時に表示します。

2. グラフィックエディター用のツールパレット

描画ツール(ペン、ブラシ、消しゴム、図形)を円形レイアウトで選択できるツールセレクターを実装します。

3. 放射状レイアウトのカラーピッカー

SfRadialColorItem を使用してカラーパレットを構築し、第1階層に基本色、第2階層に色合いを配置します。

4. タッチ対応キオスクナビゲーション

円形レイアウトによってアクセシビリティを向上させる、キオスクアプリケーション向けのタッチ操作に適したナビゲーションメニューを設計します。

5. サブコマンド付きコマンドパレット

最上位の項目をカテゴリ、サブ項目を個別のコマンドとする階層型コマンドメニューを作成します。

6. クイックアクションメニュー

一般的なアクション(編集、削除、共有、その他)を含む放射状メニューを開く、フローティングアクションボタンを実装します。


実装ガイド

ユーザーがラジアルメニューを実装したい場合:

  1. 基本から始める → セットアップと基本的な実装については、getting-started.mdを案内してください
  2. データバインディングについて → ItemsSource、テンプレート、コマンドについては、populating-items.mdを案内してください
  3. レイアウトを正確に制御するには → カスタムレイアウトとSegmentIndexについては、layout-types.mdを提示してください
  4. 外観をカスタマイズするには → icons.mdとappearance-and-styling.mdを案内してください
  5. 色選択UIについて → SfRadialColorItemの使い方については、color-palette.mdを案内してください
  6. ツールチップについて → ツールチップの設定については、tooltips.mdを参照してください

以下の点を常に考慮してください:

  • スペースの制約:ラジアルメニューは限られたスペースにより多くの項目を表示できます
  • タッチ操作とマウス操作:タッチインターフェイスでは半径を大きくします
  • 階層の深さ:使いやすさを保つため、メニュー階層は2~3段にします
  • 項目数:各階層の項目数は4~8個が最適です
  • 視覚的フィードバック:明確なホバー状態を示すため、RimHoverBrushとMenuMouseOverBackgroundColorを使用します

コメント