다음을 통해 공유


연습: 속성을 속성 창

이 연습에서는 개체의 공용 속성을 노출은 속성이 창. 이러한 속성을 변경 하면 변경 내용이 반영 됩니다 있는 속성이 창.

사전 요구 사항

이 연습을 완료 하려면 설치 해야 해당 Visual Studio 2010 SDK.

참고

Visual Studio SDK에 대 한 자세한 내용은 참조 하십시오. Visual Studio 개요를 확장합니다..Visual Studio SDK를 다운로드 하는 방법를 참조 하십시오. Visual Studio 확장성 개발자 센터 MSDN 웹 사이트에서.

Visual Studio 패키지 프로젝트 템플릿에 대해 위치

세 가지 다른 위치에서 찾을 수 있습니다 Visual Studio 패키지 프로젝트 서식 파일은 새 프로젝트 대화 상자:

  1. 아래에서 Visual Basic 확장성. 프로젝트의 기본 언어는 Visual Basic입니다.

  2. C#에서 확장 합니다. 프로젝트의 기본 언어는 C#입니다.

  3. 아래에서 기타 프로젝트 형식 확장성. 프로젝트의 기본 언어는 c + +입니다.

속성 창에 속성을 노출합니다.

이 섹션에서 기본적인 도구 창의 패키지 만들기 및 연결 된 창의 창 개체의 공용 속성을 표시에서 속성이 창입니다.

속성 창에 속성을 제공

  1. 작성 된 Visual Studio 라는 패키지 프로젝트 MyObjectProps.

    관리 되는 Vspackage를 만드는 방법에 대 한 자세한 내용은 참조 하십시오. Visual Studio 패키지 템플릿을 사용 하 여 연습: 메뉴 명령 만들기.

  2. 에 있는 프로그래밍 언어 선택 페이지에서 선택 C#. 사용할 수 있는 Visual Basic 패키지에 하지만이 연습을 만들려면 C# 사용 합니다.

  3. 에 있는 VSPackage 옵션 선택 페이지에서 선택 도구 창을.

  4. 도구 창의 옵션 페이지에서 변경의 창 이름 에 내 개체 속성, 클릭 하 고 다음을 클릭 완료.

    이 템플릿은 MyObjectProps 관리 되는 프로젝트를 만듭니다.

  5. Mytoolwindow.cs에서 파일을 연 다음 필드를 추가 MyToolWindow 클래스입니다.

    private ITrackSelection trackSel;
    private SelectionContainer selContainer;
    
  6. MyToolWindow 클래스에 다음 코드를 추가 합니다.

        Private ReadOnly Property TrackSelection() As ITrackSelection
            Get 
                If trackSel Is Nothing Then
                    trackSel = TryCast(GetService(GetType(STrackSelection)), ITrackSelection)
                End If 
                Return trackSel
            End Get 
        End Property 
    
        Public Sub UpdateSelection()
            Dim track As ITrackSelection = TrackSelection
            If track IsNot Nothing Then
                track.OnSelectChange(DirectCast(selContainer, ISelectionContainer))
            End If 
        End Sub 
    
        Public Sub SelectList(ByVal list As ArrayList)
            selContainer = New SelectionContainer(True, False)
            selContainer.SelectableObjects = list
            selContainer.SelectedObjects = list
            UpdateSelection()
        End Sub 
    
        Public Overloads Overrides Sub OnToolWindowCreated()
            Dim listObjects As New ArrayList()
            listObjects.Add(Me)
            SelectList(listObjects)
        End Sub 
        Private checked As Boolean = False
        <Category("My Properties")> _
        <Description("MyControl properties")> _
        Public Property IsChecked() As Boolean 
            Get 
                Return IsChecked
            End Get 
            Set(ByVal value As Boolean)
                checked = value
                control.checkBox1.Checked = value
            End Set 
        End Property 
        Private sObject As Simple = Nothing 
        Public ReadOnly Property SimpleObject() As Simple
            Get 
                If sObject Is Nothing Then
                    SimpleObject = New Simple()
                End If 
                Return sObject
            End Get 
        End Property 
        Public Sub SelectSimpleList()
            Dim listObjects As New ArrayList()
            listObjects.Add(SimpleObject)
            SelectList(listObjects)
        End Sub 
    
        Public Sub SelectThisList()
            Dim listObjects As New ArrayList()
            listObjects.Add(Me)
            SelectList(listObjects)
        End Sub
    
    private ITrackSelection TrackSelection
    {
        get
        {
            if (trackSel == null)
                trackSel =
                   GetService(typeof(STrackSelection)) as ITrackSelection;
            return trackSel;
        }
    }
    
    public void UpdateSelection()
    {
        ITrackSelection track = TrackSelection;
        if (track != null)
            track.OnSelectChange((ISelectionContainer)selContainer);
    }
    
    public void SelectList(ArrayList list)
    {
        selContainer = new SelectionContainer(true, false);
        selContainer.SelectableObjects = list;
        selContainer.SelectedObjects = list;
        UpdateSelection();
    }
    
    public override void OnToolWindowCreated()
    {
        ArrayList listObjects = new ArrayList();
        listObjects.Add(this);
        SelectList(listObjects);
    }
    

    TrackSelection 속성 사용 하 여 GetService 얻을 수는 STrackSelection 를 제공 하는 서비스는 ITrackSelection 인터페이스입니다. OnToolWindowCreated 이벤트 처리기와 SelectList 메서드 함께 만들기 도구 창의 창 개체 에서만 자체 포함 목록에서 선택한 합니다. UpdateSelection 메서드 지시는 속성 도구 창에 공용 속성을 표시 하는 창입니다.

  7. 빌드 및 F5 키를 눌러 디버그 모드에서 프로젝트를 시작 합니다. 이렇게 하면 시작 Visual Studio 지 수 있습니다.

    참고

    두 가지 버전의 Visual Studio 지금 열려 있습니다.

  8. 경우는 속성이 창이 표시 되지 않을 경우 F4 키를 눌러 엽니다.

  9. Visual Studio Exp에는 보기 메뉴를 가리키고 다른 창, 다음을 클릭 하 고 내 개체 속성.

    창이 열리고 창 틀의 공용 속성을 표시에서 속성이 창.

  10. 클릭 솔루션 탐색기. 속성에는 속성이 창이 사라집니다. 클릭 하 여 내 개체 속성 창. 속성을 다시 표시 합니다.

  11. 변경의 캡션 속성에는 속성 창에 뭔가 다른.

    내 개체 속성 창 이름을 적절 하 게 변경합니다.

도구 창의 속성을 노출합니다.

이 섹션에서 도구 창 추가 하 고 해당 속성을 노출 합니다. 속성을 변경 하면 변경 내용이 반영 됩니다 있는 속성이 창.

도구 창의 속성을 노출.

  1. 닫기 Visual Studio 지 수 있습니다.

  2. Mytoolwindow.cs를 열고 추가 public boolean 속성 IsChecked MyToolWindow 클래스입니다.

    Private checked As Boolean = False
    <Category("My Properties")> _
    <Description("MyControl properties")> _
    Public Property IsChecked() As Boolean 
        Get 
            Return IsChecked
        End Get 
        Set(ByVal value As Boolean)
            checked = value
            control.checkBox1.Checked = value
        End Set 
    End Property
    
    [Category("My Properties")]
    [Description("MyControl properties")]
    public bool IsChecked
    {
        get {
            if (base.Content == null)  return false;
            return (bool)((MyControl) base.Content).checkBox1.IsChecked; 
        }
        set {
            ((MyControl) base.Content).checkBox1.IsChecked = value;
        }
    }
    

    이 속성을 읽고 그 상태 나중에 만들기의 WPF 선택을 직접 씁니다.

  3. MyToolWindow 생성자를 추가 this 키워드에 있는 MyControl 생성자:

    control = New MyControl(Me)
    
    base.Content = new MyControl(this);
    
  4. Mycontrol.xaml.cs에서 파일을 열고 생성자에 다음 코드를 사용 하 여 교체 합니다.

    Private pane As MyToolWindow
    Public Sub New(ByVal pane As MyToolWindow)
        InitializeComponent()
        Me.pane = pane
        checkBox1.Checked = pane.IsChecked
    End Sub
    
    private MyToolWindow pane;
    public MyControl(MyToolWindow pane)
    {
        InitializeComponent();
        this.pane = pane;
        checkBox1.IsChecked = false;
    }
    

    이 MyControl 액세스 하는 MyToolWindow 창.

  5. 디자인 보기로 변경 합니다.

  6. Button 컨트롤을 삭제 합니다. 확인란에서 추가 도구 상자 왼쪽 코너 위로.

  7. 확인란을 두 번 클릭 합니다.

    이 checkBox1_Checked 이벤트 처리기 및 코드 편집기에서 열립니다.

  8. 속성 창에서 두 번 클릭 하 여 checkBox1선택 하지 않 은 이벤트 처리기입니다.

    이 checkBox1_Unchecked 이벤트 처리기 및 코드 편집기에서 열립니다.

  9. 다음 코드를 사용 하 여 확인란 이벤트 처리기를 대체 합니다.

    Private Sub checkBox1_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles checkBox1.CheckedChanged
        pane.IsChecked = checkBox1.Checked
        pane.UpdateSelection()
        If pane.IsChecked Then
            pane.SelectSimpleList()
        Else
            pane.SelectThisList()
        End If 
    End Sub
    
    private void checkBox1_Checked(object sender, RoutedEventArgs e)
    {
        pane.IsChecked = true;
        pane.UpdateSelection();
    }
    private void checkBox1_Unchecked(object sender, RoutedEventArgs e)
    {
        pane.IsChecked = false;
        pane.UpdateSelection();
    }
    
  10. 빌드 및 F5 키를 눌러 디버그 모드에서 프로젝트를 시작 합니다. 이렇게 하면 시작 Visual Studio 지 수 있습니다.

  11. Visual Studio Exp에는 보기 메뉴를 가리키고 다른 창, 다음을 클릭 하 고 내 개체 속성.

    공용 속성 창이 창의 표시는 속성 창입니다. 해당 IsChecked 속성에 해당 범주에 나타납니다 내 속성.

  12. 클릭 하 여 IsChecked 속성입니다.

    설명은 MyControl 속성 아래에 표시 되는 속성 창.

  13. 내 개체 속성 창에서 해당 확인란을 선택 합니다. IsChecked 변경 True. 확인란의 선택을 취소 합니다. IsChecked 변경 False. 값을 변경 IsChecked 에 있는 속성 창입니다. 확인란 내 개체 속성 창 변경 될 새 값과 일치 합니다.

    참고

    속성을 삭제 해야 또는 개체에 표시 되는 경우는 속성 창에서 호출 OnSelectChange 에 null 선택 컨테이너 첫 번째.속성 또는 개체를 삭제 한 후 업데이트 된 선택 영역의 컨테이너에 변경할 수 있습니다 SelectableObjectsSelectedObjects 를 나열 합니다.

선택 목록 변경

이 섹션에서 선택 목록 속성을 기본 클래스에 대 한 추가 및 도구 창 인터페이스를 사용 하 여 표시 하는 선택 목록에서 선택할 수 있습니다.

목록을 선택 영역을 변경 하려면

  1. 닫기 Visual Studio 지 수 있습니다.

  2. MyToolWindow.cs 또는 Mytoolwindow.vb를 열고 공용 클래스 추가 Simple, 네임 스페이스 문 바로 다음 파일의 시작 부분 및 curlique 괄호.

    Public Class Simple
        Private m_someText As String = ""
    
        <Category("My Properties")> _
        <Description("Simple Properties")> _
        <DisplayName("MyText")> _
        Public Property SomeText() As String 
            Get 
                Return m_someText
            End Get 
            Set(ByVal value As String)
                m_someText = value
            End Set 
        End Property
    
        <Category("My Properties")> _
        <Description("Read-only property")> _
        Public ReadOnly Property [ReadOnly]() As String 
            Get 
                Return "Hello" 
            End Get 
        End Property 
    End Class
    
    public class Simple
    {
        private string someText = "";
    
        [Category("My Properties")]
        [Description("Simple Properties")]
        [DisplayName("MyText")]
        public string SomeText
        {
            get { return someText; }
            set { someText = value; }
        }
    
        [Category("My Properties")]
        [Description("Read-only property")]
        public string ReadOnly
        {
            get { return "Hello"; }
        }
    }
    

    형식의 개체를 Simple 공용 문자열 속성이 있는 SomeText, 및 ReadOnly.

  3. 이 코드의 끝에 추가 MyToolWindow 클래스의 IsChecked 속성 바로 뒤.

    Private sObject As Simple = Nothing 
    Public ReadOnly Property SimpleObject() As Simple
        Get 
            If sObject Is Nothing Then
                SimpleObject = New Simple()
            End If 
            Return sObject
        End Get 
    End Property 
    Public Sub SelectSimpleList()
        Dim listObjects As New ArrayList()
        listObjects.Add(SimpleObject)
        SelectList(listObjects)
    End Sub 
    
    Public Sub SelectThisList()
        Dim listObjects As New ArrayList()
        listObjects.Add(Me)
        SelectList(listObjects)
    End Sub
    
    public void SelectSimpleList()
    {
        ArrayList listObjects = new ArrayList();
        listObjects.Add(SimpleObject);
        SelectList(listObjects);
    }
    
    public void SelectThisList()
    {
        ArrayList listObjects = new ArrayList();
        listObjects.Add(this);
        SelectList(listObjects);
    }
    

    이 singleton 속성을 만듭니다 SimpleObject, 및 전환 하는 방법의 속성 창의 선택 영역을 창의 창 하는 Simple 개체입니다.

  4. MyControl.cs 또는 Mycontrol.vb에서 코드 보기를 엽니다. 확인란 처리기에이 코드 줄을 바꾸기:

    If pane.IsChecked Then
        pane.SelectSimpleList()
    Else
        pane.SelectThisList()
    End If
    
    private void checkBox1_Checked(object sender, RoutedEventArgs e)
    {
        pane.IsChecked = true;
        pane.SelectSimpleList();
        pane.UpdateSelection();
    }
    private void checkBox1_Unchecked(object sender, RoutedEventArgs e)
    {
        pane.IsChecked = false;
        pane.SelectThisList();
        pane.UpdateSelection();
    }
    
  5. 빌드 및 F5 키를 눌러 디버그 모드에서 프로젝트를 시작 합니다.

    이렇게 하면 시작 Visual Studio 지 수 있습니다.

  6. Visual Studio Exp에는 보기 메뉴를 가리키고 다른 창, 다음을 클릭 하 고 내 개체 속성.

    창이 열리고 창 틀의 공용 속성을 표시에서 속성이 창.

  7. 내 개체 속성 창에서 해당 확인란을 선택 합니다. 속성 창에 표시 됩니다 있는 Simple 개체 속성, SomeText읽기 전용. 확인란의 선택을 취소 합니다. 공용 속성 창이 창의 표시는 속성 창입니다.

    참고

    표시 되는 이름을 일부 텍스트 입니다 내 텍스트.

가장 좋은 방법

이 연습에서는 ISelectionContainer 선택 가능 객체 수집 및 선택한 개체 컬렉션 같은 컬렉션 될 수 있도록 구현 됩니다. 선택한 개체만 속성 브라우저 목록에 나타납니다. 전체 ISelectionContainer 밐 Reference.ToolWindow 샘플을 참조 하십시오.

Visual Studio 도구 창을 Visual Studio 세션 간에 유지 됩니다. 도구 창의 상태 유지에 대 한 자세한 내용은 ProvideProfileAttribute.

참고 항목

개념

속성 브라우저에 대 한 지원

기타 리소스

VSPackage 상태