Partager via


Comment : ajouter un élément de menu contextuel à un type d'élément de projet SharePoint personnalisé

Lorsque vous définissez un type d'élément de projet SharePoint personnalisé, vous pouvez ajouter un élément de menu contextuel à l'élément de projet. L'élément de menu apparaît lorsqu'un utilisateur clique avec le bouton droit sur l'élément de projet dans l'Explorateur de solutions.

Les étapes suivantes supposent que vous avez déjà défini votre propre type d'élément de projet SharePoint. Pour plus d'informations, consultez Comment : définir un type d'élément de projet SharePoint.

Pour ajouter un élément de menu contextuel à un type d'élément de projet personnalisé

  1. Dans la méthode InitializeType de votre implémentation ISharePointProjectItemTypeProvider, gérez l'événement ProjectItemMenuItemsRequested du paramètre projectItemTypeDefinition.

  2. Dans votre gestionnaire d'événements pour l'événement ProjectItemMenuItemsRequested, ajoutez un nouvel objet IMenuItem à la collection ViewMenuItems ou AddMenuItems du paramètre d'arguments d'événement.

  3. Dans le gestionnaire d'événements Click pour le nouvel objet IMenuItem, effectuez les tâches que vous voulez exécuter lorsqu'un utilisateur clique sur votre élément de menu contextuel.

Exemple

L'exemple de code suivant montre comment ajouter un élément de menu contextuel à un type d'élément de projet personnalisé. Lorsque l'utilisateur clique avec le bouton droit sur l'élément de projet dans l'Explorateur de solutions, puis clique sur l'élément de menu Écrire le message dans la fenêtre Sortie, Visual Studio affiche un message dans la fenêtre Sortie.

Imports System
Imports System.ComponentModel.Composition
Imports Microsoft.VisualStudio.SharePoint

Namespace Contoso.Examples.ProjectItemTypeWithMenu

    <Export(GetType(ISharePointProjectItemTypeProvider))> _
    <SharePointProjectItemType("Contoso.ExampleProjectItemType")> _
    <SharePointProjectItemIcon("ExampleProjectItemType.ProjectItemIcon.ico")> _
    Friend Class ExampleProjectItemTypeWithMenu
        Implements ISharePointProjectItemTypeProvider

        Private Sub InitializeType(ByVal projectItemTypeDefinition As ISharePointProjectItemTypeDefinition) _
            Implements ISharePointProjectItemTypeProvider.InitializeType
            projectItemTypeDefinition.Name = "ExampleProjectItemType"
            projectItemTypeDefinition.SupportedDeploymentScopes = _
                SupportedDeploymentScopes.Site Or SupportedDeploymentScopes.Web
            projectItemTypeDefinition.SupportedTrustLevels = SupportedTrustLevels.All

            AddHandler projectItemTypeDefinition.ProjectItemMenuItemsRequested, AddressOf ProjectItemMenuItemsRequested
        End Sub

        Private Sub ProjectItemMenuItemsRequested(ByVal Sender As Object,
            ByVal e As SharePointProjectItemMenuItemsRequestedEventArgs)
            Dim menuItem As IMenuItem = e.ViewMenuItems.Add("Write Message to Output Window")
            AddHandler menuItem.Click, AddressOf MenuItem_Click
        End Sub

        Private Sub MenuItem_Click(ByVal Sender As Object, ByVal e As MenuItemEventArgs)
            Dim projectItem As ISharePointProjectItem = CType(e.Owner, ISharePointProjectItem)
            projectItem.Project.ProjectService.Logger.WriteLine(
                String.Format("This message was written from a shortcut menu for {0}.", projectItem.Name),
                LogCategory.Status)
        End Sub
    End Class
End Namespace
using System;
using System.ComponentModel.Composition;
using Microsoft.VisualStudio.SharePoint;

namespace Contoso.Examples.ProjectItemTypeWithMenu
{
    [Export(typeof(ISharePointProjectItemTypeProvider))]
    [SharePointProjectItemType("Contoso.ExampleProjectItemType")]
    [SharePointProjectItemIcon("ExampleProjectItemType.ProjectItemIcon.ico")]
    internal class ExampleProjectItemTypeWithMenu : ISharePointProjectItemTypeProvider
    {
        public void InitializeType(ISharePointProjectItemTypeDefinition projectItemTypeDefinition)
        {
            projectItemTypeDefinition.Name = "ExampleProjectItemType";
            projectItemTypeDefinition.SupportedDeploymentScopes =
                SupportedDeploymentScopes.Site | SupportedDeploymentScopes.Web;
            projectItemTypeDefinition.SupportedTrustLevels = SupportedTrustLevels.All;

            projectItemTypeDefinition.ProjectItemMenuItemsRequested += 
                projectItemTypeDefinition_ProjectItemMenuItemsRequested;
        }

        void projectItemTypeDefinition_ProjectItemMenuItemsRequested(object sender,
            SharePointProjectItemMenuItemsRequestedEventArgs e)
        {
            IMenuItem menuItem = e.ViewMenuItems.Add("Write Message to Output Window");
            menuItem.Click += MenuItemExtension_Click;
        }

        void MenuItemExtension_Click(object sender, MenuItemEventArgs e)
        {
            ISharePointProjectItem projectItem = (ISharePointProjectItem)e.Owner;
            projectItem.Project.ProjectService.Logger.WriteLine(
                String.Format("This message was written from a shortcut menu for {0}.", projectItem.Name),
                LogCategory.Status);
        }
    }
}

Cet exemple utilise le service de projet SharePoint pour écrire le message dans la fenêtre Sortie. Pour plus d'informations, consultez Utilisation du service de projet SharePoint.

Compilation du code

Cet exemple requiert un projet de bibliothèque de classes avec des références aux assemblys suivants :

  • Microsoft.VisualStudio.SharePoint

  • System.ComponentModel.Composition

Déploiement de l'élément de projet

Pour donner à d'autres développeurs la possibilité d'utiliser votre élément de projet, créez un modèle de projet ou un modèle d'élément de projet. Pour plus d'informations, consultez Création de modèles d'élément et de modèles de projet pour les éléments de projet SharePoint.

Pour déployer l'élément de projet, créez un package d'extension Visual Studio (VSIX) pour l'assembly, le modèle et tous les autres fichiers que vous voulez distribuer avec l'élément de projet. Pour plus d'informations, consultez Déploiement d'extensions pour les outils SharePoint dans Visual Studio.

Voir aussi

Tâches

Comment : définir un type d'élément de projet SharePoint

Autres ressources

Comment : ajouter une propriété à un type d'élément de projet SharePoint personnalisé

Définition de types d'éléments de projet SharePoint personnalisés