이 연습 과정에서는 속성 창에 개체의 공용 속성을 표시합니다. 이러한 속성에 대한 변경 내용은 속성 창에 반영됩니다.
속성 창에 속성 노출
이 섹션에서는 사용자 지정 도구 창을 만들고 속성 창에 연결된 창 개체의 공용 속성을 표시합니다.
속성 창에 속성을 노출하려면
모든 Visual Studio 확장은 확장 자산을 포함하는 VSIX 배포 프로젝트로 시작합니다. 라는 Visual Studio VSIX 프로젝트를 만듭니다
MyObjectPropertiesExtension
. "vsix"를 검색하여 새 프로젝트 대화 상자에서 VSIX 프로젝트 템플릿을 찾을 수 있습니다.라는
MyToolWindow
사용자 지정 도구 창 항목 템플릿을 추가하여 도구 창을 추가합니다. 솔루션 탐색기에서 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 추가>새 항목을 선택합니다. 새 항목 추가 대화 상자에서 Visual C# 항목>확장성으로 이동하여 사용자 지정 도구 창을 선택합니다. 대화 상자 아래쪽의 이름 필드에서 파일 이름을 MyToolWindow.cs 변경합니다. 사용자 지정 도구 창을 만드는 방법에 대한 자세한 내용은 도구 창을 사용하여 확장 만들기를 참조하세요.MyToolWindow.cs 열고 다음 using 문을 추가합니다.
using System.Collections; using System.ComponentModel; using Microsoft.VisualStudio.Shell.Interop;
이제 클래스에 다음 필드를 추가합니다
MyToolWindow
.private ITrackSelection trackSel; private SelectionContainer selContainer;
클래스에 다음 코드를 추가합니다
MyToolWindow
.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
도구 창 창의 공용 속성을 표시하도록 속성 창에 지시합니다.프로젝트를 빌드하고 디버깅을 시작합니다. Visual Studio의 실험적 인스턴스가 표시됩니다.
속성 창이 표시되지 않으면 F4 키를 눌러 엽니다.
MyToolWindow 창을 엽니다. 보기>다른 창에서 찾을 수 있습니다.
창이 열리고 창의 공용 속성이 속성 창에 나타납니다.
속성 창의 Caption 속성을 내 개체 속성으로 변경합니다.
MyToolWindow 창 캡션은 그에 따라 변경됩니다.
도구 창 속성 노출
이 섹션에서는 도구 창을 추가하고 해당 속성을 노출합니다. 속성에 대한 변경 내용은 속성 창에 반영됩니다.
도구 창 속성을 노출하려면
MyToolWindow.cs 열고 클래스에 공용 부울 속성 IsChecked를
MyToolWindow
추가합니다.[Category("My Properties")] [Description("MyToolWindowControl properties")] public bool IsChecked { get { if (base.Content == null) return false; return (bool)(( MyToolWindowControl) base.Content).checkBox.IsChecked; } set { ((MyToolWindowControl) base.Content).checkBox.IsChecked = value; } }
이 속성은 나중에 만들 WPF 확인란에서 상태를 가져옵니다.
MyToolWindowControl.xaml.cs 열고 MyToolWindowControl 생성자를 다음 코드로 바꿉 있습니다.
private MyToolWindow pane; public MyToolWindowControl(MyToolWindow pane) { InitializeComponent(); this.pane = pane; checkBox.IsChecked = false; }
이렇게 하면
MyToolWindowControl
이/가MyToolWindow
창에 접근할 수 있습니다.MyToolWindow.cs 다음과 같이 생성자를 변경
MyToolWindow
합니다.base.Content = new MyToolWindowControl(this);
MyToolWindowControl의 디자인 보기로 변경합니다.
단추를 삭제하고 도구 상자 에서 왼쪽 위 모서리에 확인란을 추가합니다.
Checked 및 Unchecked 이벤트를 추가합니다. 디자인 보기에서 확인란을 선택합니다. 속성 창에서 속성 창의 오른쪽 위에 있는 이벤트 처리기 단추를 클릭합니다. Checked를 찾고 텍스트 상자에 checkbox_Checked를 입력한 다음, Unchecked를 찾아 텍스트 상자에 checkbox_Unchecked를 입력합니다.
확인란 이벤트 처리기를 추가합니다.
private void checkbox_Checked(object sender, RoutedEventArgs e) { pane.IsChecked = true; pane.UpdateSelection(); } private void checkbox_Unchecked(object sender, RoutedEventArgs e) { pane.IsChecked = false; pane.UpdateSelection(); }
프로젝트를 빌드하고 디버깅을 시작합니다.
실험적 인스턴스에서 MyToolWindow 창을 엽니다.
속성 창에서 창의 속성을 찾습니다. IsChecked 속성은 내 속성 범주 아래의 창 아래쪽에 나타납니다.
MyToolWindow 창에서 확인란을 선택합니다. 속성 창에서 IsChecked가 True로 변경됩니다. MyToolWindow 창에서 확인란의 선택을 취소합니다. 속성 창에서 IsChecked가 False로 변경됩니다. 속성 창에서 IsChecked 값을 변경합니다. MyToolWindow 창의 확인란이 새 값과 일치하도록 변경됩니다.
비고
속성 창에 표시되는 개체를 삭제해야 하는 경우 먼저 선택 컨테이너를 사용하여
null
호출OnSelectChange
합니다. 속성 또는 객체를 처분한 후 업데이트된 SelectableObjects 및 SelectedObjects 목록이 있는 선택 컨테이너로 변경할 수 있습니다.
선택 목록 변경
이 섹션에서는 기본 속성 클래스에 대한 선택 목록을 추가하고 도구 창 인터페이스를 사용하여 표시할 선택 목록을 선택합니다.
선택 목록을 변경하려면
MyToolWindow.cs 열고 라는
Simple
공용 클래스를 추가합니다.public class Simple { private string someText = ""; [Category("My Properties")] [Description("Simple Properties")] [DisplayName("My Text")] public string SomeText { get { return someText; } set { someText = value; } } [Category("My Properties")] [Description("Read-only property")] public bool ReadOnly { get { return false; } } }
MyToolWindow
클래스에SimpleObject
속성을 추가하고, 창의 창틀과Simple
개체 간의 선택을 전환하기 위한 두 가지 메서드를 속성 창에 추가합니다.private Simple simpleObject = null; public Simple SimpleObject { get { if (simpleObject == null) simpleObject = new Simple(); return simpleObject; } } public void SelectSimpleList() { ArrayList listObjects = new ArrayList(); listObjects.Add(SimpleObject); SelectList(listObjects); } public void SelectThisList() { ArrayList listObjects = new ArrayList(); listObjects.Add(this); SelectList(listObjects); }
MyToolWindowControl.cs 확인란 처리기를 다음 코드 줄로 바꿉니다.
private void checkbox_Checked(object sender, RoutedEventArgs e) { pane.IsChecked = true; pane.SelectSimpleList(); pane.UpdateSelection(); } private void checkbox_Unchecked(object sender, RoutedEventArgs e) { pane.IsChecked = false; pane.SelectThisList(); pane.UpdateSelection(); }
프로젝트를 빌드하고 디버깅을 시작합니다.
실험적 인스턴스에서 MyToolWindow 창을 엽니다.
MyToolWindow 창에서 확인란을 선택합니다. 속성 창에는
Simple
개체 속성인 SomeText 및 ReadOnly가 표시됩니다. 확인란의 선택을 취소합니다. 창의 공용 속성이 속성 창에 나타납니다.비고
SomeText의 표시 이름은 내 텍스트입니다.
모범 사례
이 연습 ISelectionContainer 에서는 선택 가능한 개체 컬렉션과 선택한 개체 컬렉션이 동일한 컬렉션이 되도록 구현됩니다. 선택한 개체만 속성 브라우저 목록에 나타납니다. 보다 완전한 ISelectionContainer 구현은 Reference.ToolWindow 샘플을 참조하세요.
Visual Studio 도구 창은 Visual Studio 세션 간에 유지됩니다. 도구 창 상태를 유지하는 방법에 대한 자세한 내용은 다음을 참조하세요 ProvideProfileAttribute.