속성 창에 속성 표시
이 연습에서는 개체의 공용 속성을 속성 창에 표시합니다. 이러한 속성에 대한 변경 내용은 속성 창에서 반영됩니다.
속성 창에 속성 표시
이 섹션에서는 사용자 지정 도구 창을 만들고 연결된 창 개체의 공용 속성을 속성 창에 표시합니다.
속성을 속성 창에 표시하려면
모든 Visual Studio 확장은 확장 자산을 포함하는 VSIX 배포 프로젝트로 시작합니다.
MyObjectPropertiesExtension
이라는 Visual Studio VSIX 프로젝트를 만듭니다. “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
를 사용하여 ITrackSelection 인터페이스를 제공하는STrackSelection
서비스를 가져옵니다.OnToolWindowCreated
이벤트 처리기와SelectList
메서드는 도구 창 개체 자체만 포함하는 선택한 개체의 목록을 만듭니다.UpdateSelection
메서드는 속성 창에 도구 창의 공용 속성을 표시하도록 지시합니다.프로젝트를 빌드하고 디버깅을 시작합니다. Visual Studio의 실험적 인스턴스가 표시되어야 합니다.
속성 창이 표시되지 않으면 F4 키를 눌러 엽니다.
MyToolWindow 창을 엽니다. 보기>다른 창에서 찾을 수 있습니다.
창이 열리고 창의 공용 속성이 속성 창에 나타납니다.
속성 창의 캡션 속성을 내 개체 속성으로 변경합니다.
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의 표시 이름은 My Text입니다.
모범 사례
이 연습에서는 선택 가능한 개체 컬렉션과 선택한 개체 컬렉션이 동일한 컬렉션이 되도록 ISelectionContainer이 구현됩니다. 선택한 개체만 속성 브라우저 목록에 표시됩니다. 보다 완전한 ISelectionContainer 구현은 Reference.ToolWindow 샘플을 참조하세요.
Visual Studio 도구 창은 Visual Studio 세션 간에 유지됩니다. 도구 창 상태를 유지하는 방법에 대한 자세한 내용은 ProvideProfileAttribute를 참조하세요.