0

ノードのセットがあり、WPF フォームで各ノードを表すイメージを作成します。

        BitmapImage src = new BitmapImage();
        src.BeginInit();
        src.UriSource = new Uri("pack://application:,,,/WpfApplication1;component/Resources/Node.png", UriKind.Absolute);
        src.CacheOption = BitmapCacheOption.OnLoad;
        src.EndInit();

        foreach (var item in nodeList)
        {
            Image newImage = new Image();
            newImage.Margin = new Thickness(item.Position.X , item.Position.Y , 0, 0);
            newImage.Source = src;
            Canvas1.Children.Add(newImage);
            newImage.MouseRightButtonDown += newImage_MouseRightButtonDown;
        }

私のデリゲートは、フォームに配置されたすべての画像に対して ContextMenu を作成します。

    void newImage_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
    {
        ContextMenu menu = new ContextMenu();

        int index = Canvas1.Children.IndexOf((Image)sender);

        MenuItem addExistingLink = new MenuItem();
        addExistingLink.Header = "Add Existing Link";
        addExistingLink.Click += submenu_Click;

        MenuItem addNewLink = new MenuItem();
        addNewLink.Header = "Add New Link";
        addNewLink.Click += submenu_Click;

        menu.Items.Add(addExistingLink);
        menu.Items.Add(addNewLink);
        menu.IsOpen = true;
    }

そして、サブメニューのクリックイベントを委任します

    void submenu_Click(object sender, RoutedEventArgs e)
    {

    }

このコンテキスト メニューをクリックしたときに自分の画像にアクセスするにはどうすればよいですか?

送信者が MenuItem タイプを返す

        var item1 = sender;

これは MainWindow タイプを返します

        var item2 = this;

親は ContextMenu タイプを返します

        var item3 = item1.Parent;
4

1 に答える 1

0

のを にアクセスできるオブジェクトに設定してみてDataContextください:ContextMenuImage

ContextMenu menu = new ContextMenu();
menu.DataContext = this;

または:

ContextMenu menu = new ContextMenu();
menu.DataContext = this.DataContext;

Imageここでは推測していますが、どのオブジェクトがコントロールにアクセスできるかを確認できるはずです。

于 2013-10-28T10:47:48.153 に答える