Udostępnij za pośrednictwem


Jak: Dodawanie właściwości do niestandardowy typ elementu projektu programu SharePoint

Podczas definiowania niestandardowych typu element projektu programu SharePoint można dodać właściwość do elementu projektu.Właściwość pojawia się w Właściwości okna, gdy jest zaznaczony element projektu w Solution Explorer.

Poniższe informacje dotyczą przypadków zostały już zdefiniowane własne typu element projektu programu SharePoint.Aby uzyskać więcej informacji, zobacz Jak: definiowanie typu element projektu programu SharePoint.

Aby dodać właściwość do definicji typu element projektu

  1. Definiowanie klasy z publicznych właściwość, która reprezentuje właściwość dodawanego do projektu niestandardowego typu elementu.Jeśli chcesz dodać wiele właściwości typu element projektu niestandardowe, można zdefiniować wszystkie właściwości w tej samej klasie lub w różnych klas.

  2. W InitializeType metody na ISharePointProjectItemTypeProvider realizacji, uchwyt ProjectItemPropertiesRequested zdarzenia projectItemTypeDefinition parametru.

  3. W obsłudze zdarzeń dla ProjectItemPropertiesRequested zdarzenie, dodać instancję klasy niestandardowej właściwości do PropertySources kolekcji parametr argumenty zdarzeń.

Przykład

Poniższy przykład kodu demonstruje, jak dodać właściwość o nazwie Przykładzie właściwość do niestandardowego elementu typu projektu.

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

Namespace Contoso.Examples.ProjectItemTypeWithProperty

    <Export(GetType(ISharePointProjectItemTypeProvider))> _
    <SharePointProjectItemType("Contoso.ExampleProjectItemType")> _
    <SharePointProjectItemIcon("ExampleProjectItemType.ProjectItemIcon.ico")> _
    Friend Class ExampleProjectItemTypeWithProperty
        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.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.ProjectItemTypeWithProperty
{
    [Export(typeof(ISharePointProjectItemTypeProvider))]
    [SharePointProjectItemType("Contoso.ExampleProjectItemType")]
    [SharePointProjectItemIcon("ExampleProjectItemType.ProjectItemIcon.ico")]
    internal class ExampleProjectItemTypeWithProperty : ISharePointProjectItemTypeProvider
    {
        public void InitializeType(ISharePointProjectItemTypeDefinition projectItemTypeDefinition)
        {
            projectItemTypeDefinition.Name = "ExampleProjectItemType";
            projectItemTypeDefinition.SupportedDeploymentScopes =
                SupportedDeploymentScopes.Site | SupportedDeploymentScopes.Web;
            projectItemTypeDefinition.SupportedTrustLevels = SupportedTrustLevels.All;

            projectItemTypeDefinition.ProjectItemPropertiesRequested += 
                projectItemTypeDefinition_ProjectItemPropertiesRequested;
        }

        void projectItemTypeDefinition_ProjectItemPropertiesRequested(object sender, 
            SharePointProjectItemPropertiesRequestedEventArgs e)
        {
            CustomProperties property;

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

            e.PropertySources.Add(property);
        }
    }

    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);
                }
            }
        }
    }
}

Ee791683.collapse_all(pl-pl,VS.110).gifOpis kodu

W celu zapewnienia, że ta sama instancja CustomProperties klasa jest używana przy każdym ProjectItemPropertiesRequested zdarzenie, przykładowy kod zapisuje właściwości obiektu do Annotations właściwość czasu pozycja pierwszego projektu, zdarzenie to występuje.Kod pobiera tego obiektu, w każdym przypadku, gdy to zdarzenie wystąpi ponownie.Aby uzyskać więcej informacji na temat za pomocą Annotations właściwość, aby zapisać dane z elementami projektu, zobacz Kojarzenie danych niestandardowy z rozszerzeniami narzędzia programu SharePoint.

Aby utrwalić zmiany wartości właściwości set akcesora dla ExampleProperty zapisuje nową wartość do ExtensionData właściwość ISharePointProjectItem obiekt, który jest skojarzony właściwość.Aby uzyskać więcej informacji na temat za pomocą ExtensionData właściwość, aby utrwalić danych z elementami projektu, zobacz Zapisywanie danych w rozszerzeniach systemu projektu programu SharePoint.

Ee791683.collapse_all(pl-pl,VS.110).gifOkreślanie zachowania właściwości niestandardowe

Można zdefiniować sposób właściwości niestandardowych i zachowaniem w Właściwości okno poprzez stosowanie atrybutów z System.ComponentModel obszaru nazw do definicji property.Następujące atrybuty są przydatne w wielu scenariuszach:

  • DisplayNameAttribute: Określa nazwę właściwości, która pojawia się w Właściwości okna.

  • DescriptionAttribute: Określa ciąg opisu, który pojawia się w dolnej części Właściwości okna, gdy właściwość jest wybrana.

  • DefaultValueAttribute: Określa wartość domyślną właściwości.

  • TypeConverterAttribute: Określa niestandardowe konwersji między ciąg, który jest wyświetlany w Właściwości okna i wartość właściwości nie będących ciągami.

  • EditorAttribute: Określa niestandardowe edytora użyć do modyfikowania właściwości.

Kompilowanie kodu

Te przykłady kodu wymagają projektu biblioteki klas z odniesieniem do następujących zestawów:

  • Microsoft.VisualStudio.SharePoint

  • System.ComponentModel.Composition

Wdrażanie element projektu

Aby włączyć innych deweloperów do używania element projektu, należy utworzyć szablon projektu lub szablonu elementu projektu.Aby uzyskać więcej informacji, zobacz Tworzenie elementu szablonów i szablony projektu dla elementów projektu programu SharePoint.

Aby wdrożyć elementu projektu, należy utworzyć Visual Studio extension (VSIX) pakiet Zgromadzenia, szablon i inne pliki, które chcesz dystrybuować z elementem projektu.Aby uzyskać więcej informacji, zobacz Wdrażanie rozszerzeń dla narzędzia programu SharePoint w programie Visual Studio.

Zobacz też

Koncepcje

Jak: definiowanie typu element projektu programu SharePoint

Jak: Dodaj element Menu skrótów na niestandardowy typ elementu projektu programu SharePoint

Definiowanie typów elementów projektu programu SharePoint niestandardowe