Sdílet prostřednictvím


Jak: přidání vlastnosti do rozšíření položky služby SharePoint projektu

Můžete použít rozšíření položky projektu k přidání vlastnosti k jakékoli položce projektu SharePoint, který je již nainstalován v aplikaci Visual Studio.Vlastnost se zobrazí v okně Vlastnosti při výběru položky projektu v Průzkumníku řešení.

Následující postup předpokládá, že jste již vytvořili rozšíření položky projektu.Další informace naleznete v tématu Jak: vytvoření rozšíření položky služby SharePoint projektu.

Chcete-li přidat vlastnost do rozšíření projektu SharePoint

  1. Definujte třídu s veřejnou vlastností, která představuje vlastnost, kterou přidáváte do vlastního typu položky projektu.Pokud chcete přidat více vlastností do typu položky projektu, můžete definovat všechny vlastnosti ve stejné třídě nebo v různých třídách.

  2. V metodě Initialize vaší implementace ISharePointProjectItemTypeExtension zpracujte událost ProjectItemPropertiesRequested parametru projectItemType.

  3. V obslužné rutině pro událost ProjectItemPropertiesRequested přidejte instanci třídy vašich vlastních vlastností do kolekce PropertySources parametru argumentů události.

Příklad

Následující příklad kódu ukazuje, jak lze přidat vlastnost s názvem Příklad vlastnosti do položky projektu přijímač událostí.

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

Namespace Contoso.Examples.ProjectItemExtensionWithProperty

    <Export(GetType(ISharePointProjectItemTypeExtension))> _
    <SharePointProjectItemType("Microsoft.VisualStudio.SharePoint.EventHandler")> _
    Friend Class ExampleProjectItemExtensionWithProperty
        Implements ISharePointProjectItemTypeExtension

        Private Sub Initialize(ByVal projectItemType As ISharePointProjectItemType) _
            Implements ISharePointProjectItemTypeExtension.Initialize
            AddHandler projectItemType.ProjectItemPropertiesRequested, AddressOf ProjectItemPropertiesRequested
        End Sub

        Private Sub ProjectItemPropertiesRequested(ByVal Sender As Object,
            ByVal e As SharePointProjectItemPropertiesRequestedEventArgs)
            Dim propertyObject As CustomProperties = Nothing

            ' If the properties object already exists, get it from the project item's annotations.
            If False = e.ProjectItem.Annotations.TryGetValue(propertyObject) Then
                ' Otherwise, create a new properties object and add it to the annotations.
                propertyObject = New CustomProperties(e.ProjectItem)
                e.ProjectItem.Annotations.Add(propertyObject)
            End If
            e.PropertySources.Add(propertyObject)
        End Sub
    End Class

    Friend Class CustomProperties
        Private projectItem As ISharePointProjectItem

        Friend Sub New(ByVal projectItem As ISharePointProjectItem)
            Me.projectItem = projectItem
        End Sub

        Private Const TestPropertyId As String = "Contoso.ExampleProperty"
        Private Const PropertyDefaultValue As String = "This is an example property."

        <DisplayName("Example Property")> _
        <DescriptionAttribute("This is an example property for project items.")> _
        <DefaultValue(PropertyDefaultValue)> _
        Public Property ExampleProperty As String
            Get
                Dim propertyValue As String = Nothing

                ' Get the current property value if it already exists; otherwise, return a default value.
                If False = projectItem.ExtensionData.TryGetValue(TestPropertyId, propertyValue) Then
                    propertyValue = PropertyDefaultValue
                End If
                Return propertyValue
            End Get
            Set(ByVal value As String)
                If value <> PropertyDefaultValue Then
                    ' Store the property value in the ExtensionData property of the project item.
                    ' Data in the ExtensionData property persists when the project is closed.
                    projectItem.ExtensionData(TestPropertyId) = value
                Else
                    ' Do not save the default value.
                    projectItem.ExtensionData.Remove(TestPropertyId)
                End If
            End Set
        End Property
    End Class
End Namespace
using System;
using System.ComponentModel;
using System.ComponentModel.Composition;
using Microsoft.VisualStudio.SharePoint;

namespace Contoso.Examples.ProjectItemExtensionWithProperty
{
    [Export(typeof(ISharePointProjectItemTypeExtension))]
    [SharePointProjectItemType("Microsoft.VisualStudio.SharePoint.EventHandler")]
    internal class ExampleProjectItemExtensionWithProperty : ISharePointProjectItemTypeExtension
    {
        public void Initialize(ISharePointProjectItemType projectItemType)
        {
            projectItemType.ProjectItemPropertiesRequested += 
                projectItemType_ProjectItemPropertiesRequested;
        }

        void projectItemType_ProjectItemPropertiesRequested(object sender, 
            SharePointProjectItemPropertiesRequestedEventArgs e)
        {
            CustomProperties propertyObject;

            // If the properties object already exists, get it from the project item's annotations.
            if (!e.ProjectItem.Annotations.TryGetValue(out propertyObject))
            {
                // Otherwise, create a new properties object and add it to the annotations.
                propertyObject = new CustomProperties(e.ProjectItem);
                e.ProjectItem.Annotations.Add(propertyObject);
            }

            e.PropertySources.Add(propertyObject);
        }
    }

    internal class CustomProperties
    {
        private ISharePointProjectItem projectItem;

        internal CustomProperties(ISharePointProjectItem projectItem)
        {
            this.projectItem = projectItem;
        }

        private const string PropertyId = "Contoso.ExampleProperty";
        private const string PropertyDefaultValue = "This is an example property.";

        [DisplayName("Example Property")]
        [DescriptionAttribute("This is an example property for project items.")]
        [DefaultValue(PropertyDefaultValue)]
        public string ExampleProperty
        {
            get
            {
                string propertyValue;

                // Get the current property value if it already exists; otherwise, return a default value.
                if (!projectItem.ExtensionData.TryGetValue(PropertyId, out propertyValue))
                {
                    propertyValue = PropertyDefaultValue;
                }
                return propertyValue;
            }
            set
            {
                if (value != PropertyDefaultValue)
                {
                    // Store the property value in the ExtensionData property of the project item. 
                    // Data in the ExtensionData property persists when the project is closed.
                    projectItem.ExtensionData[PropertyId] = value;
                }
                else
                {
                    // Do not save the default value.
                    projectItem.ExtensionData.Remove(PropertyId);
                }
            }
        }
    }
}

Ee471435.collapse_all(cs-cz,VS.110).gifPrincipy kódu

Zajistit stejnou instanci CustomProperties třída je použita při každém ProjectItemPropertiesRequested dojde k události, například kód přidá vlastnosti objektu Annotations vlastnost čas první položky projektu dojde k této události.Kód načte tento objekt kdykoli znovu dojde k této události.Další informace o použití Annotations vlastnost přidružit data položky projektu, viz Přidružení dat vlastní rozšíření nástroje služby SharePoint.

Pro zachování změn hodnoty vlastnosti přistupujícího objektu set pro ExampleProperty uloží nové hodnoty do vlastnosti ExtensionData objektu ISharePointProjectItem, který je s vlastností přidružen.Další informace o použití vlastnosti ExtensionData pro uložení dat s položkami projektu naleznete v tématu Uložení dat v rozšíření systému SharePoint projektu.

Ee471435.collapse_all(cs-cz,VS.110).gifUrčení chování vlastních vlastností

Můžete definovat, jak se zobrazí vlastní vlastnosti a chovají v okně Vlastnosti použitím atributů z oboru názvů System.ComponentModel pro definování vlastnosti.Následující atributy jsou užitečné v mnoha scénářích:

  • DisplayNameAttribute: Určuje název vlastnosti, která se zobrazuje v okně Vlastnosti.

  • DescriptionAttribute: Určuje řetězec popisu, který se zobrazí v dolní části okna Vlastnosti v případě, že je vlastnost vybrána.

  • DefaultValueAttribute: Určuje výchozí hodnotu této vlastnosti.

  • TypeConverterAttribute: Určuje vlastní převod mezi řetězcem, který se zobrazí v okně Vlastnosti a ne-řetězcové hodnotě vlastnosti.

  • EditorAttribute: Určuje vlastní editor použitý pro změny vlastnosti.

Probíhá kompilace kódu

Tyto příklady vyžadují projekt knihovny tříd s odkazy na následující sestavení:

  • Microsoft.VisualStudio.SharePoint

  • System.ComponentModel.Composition

Nasazování rozšíření

Chcete-li nasadit rozšíření, vytvořte Visual Studio balíček rozšíření (VSIX) pro sestavení a všechny další soubory, které chcete distribuovat s rozšířením.Další informace naleznete v tématu Nasazování rozšíření pro nástroje služby SharePoint v aplikaci Visual Studio.

Viz také

Úkoly

Názorný postup: Rozšíření typ položky služby SharePoint projektu

Koncepty

Jak: vytvoření rozšíření položky služby SharePoint projektu

Jak: rozšíření položky služby SharePoint projektu přidat položky místní nabídky

Rozšíření položky služby SharePoint projektu