FlexGrid for WPF
コンテキストメニューを表示する
基本操作 > セル > コンテキストメニューを表示する

 非編集時の場合

 C1FlexGrid にはFrameworkElement から継承される ContextMenu プロパティが用意されています。任意のコンテキストメニューを作成して C1FlexGridContextMenu プロパティに設定します。
たとえば、次の例では編集時に表示するコンテキストメニューと非編集時のコンテキストメニューを設定する方法を示します。

注意:WPF版ではFrameworkElement から継承されるContextMenuプロパティが用意されていますので、WinFormsとは異なり、ContextMenuStrip より ContextMenu プロパティの使用をお勧めします。

 

コードのコピー
Public Sub New()
    InitializeComponent()
    Dim p = Product.GetProducts(50)
    _flex.ItemsSource = p
    ' コンテキストメニューを作成します
    Dim cm As New ContextMenu()
    cm.Items.Add("メニュー1")
    cm.Items.Add("メニュー2")
    cm.Items.Add("メニュー3")
    _flex.ContextMenu = cm
    AddHandler _flex.PrepareCellForEdit, AddressOf _flex_PrepareCellForEdit
End Sub
コードのコピー
public MainWindow()
{
    InitializeComponent();       
    var p = Product.GetProducts(50);
    _flex.ItemsSource = p;           
    // コンテキストメニューを作成します
    ContextMenu cm = new ContextMenu();
    cm.Items.Add("メニュー1");
    cm.Items.Add("メニュー2");
    cm.Items.Add("メニュー3");
    _flex.ContextMenu = cm;
    _flex.PrepareCellForEdit += _flex_PrepareCellForEdit;
}

編集中の場合

編集中は編集用エディタに設定されているデフォルトのコンテキストメニューが表示されます。デフォルトのコンテキストメニューを変更する場合は、PrepareCellForEdit イベントで編集用エディタを取得し、別の ContextMenu コントロールを設定します。

 
コードのコピー
    Private Sub _flex_PrepareCellForEdit(sender As Object, e As C1.WPF.FlexGrid.CellEditEventArgs)
        ' 1列目のみのコンテキストメニューを変更します
        If e.Column = 1 Then
            ' Edit エディタを取得します
            Dim border As Border = DirectCast(_flex.ActiveEditor, Border)
            Dim control = TryCast(border.Child, Control)
            ' コンテキストメニューを作成します
            Dim cm2 As New ContextMenu()
            cm2.Items.Add("メニュー1:編集")
            cm2.Items.Add("メニュー2:編集")
            cm2.Items.Add("メニュー3:編集")
            ' コンテキストメニューを設定します
            control.ContextMenu = cm2
        Else
            ' コンテキストメニューを削除します(デフォルトに復元します)
            _flex.ActiveEditor.ContextMenu = Nothing
        End If
    End Sub
コードのコピー
void _flex_PrepareCellForEdit(object sender, C1.WPF.FlexGrid.CellEditEventArgs e)
{
    // 1列目のみのコンテキストメニューを変更します
    if (e.Column == 1)
    {
        // Edit エディタを取得します
        Border border = (Border)_flex.ActiveEditor;
        var control = border.Child as Control;
        // コンテキストメニューを作成します
        ContextMenu cm2 = new ContextMenu();
        cm2.Items.Add("メニュー1:編集");
        cm2.Items.Add("メニュー2:編集");
        cm2.Items.Add("メニュー3:編集");
        // コンテキストメニューを設定します
        control.ContextMenu = cm2;
    }
    else
    {
        // コンテキストメニューを削除します(デフォルトに復元します)
        _flex.ActiveEditor.ContextMenu = null; 
    }
}