연습: 도구 창 바로 가기 메뉴 구현
이 연습에서는 바로 가기 메뉴 도구 창에 배치 됩니다. 바로 가기 메뉴에는 단추, 텍스트 상자 또는 창 배경 그래픽 사용자 인터페이스 (GUI) 요소를 클릭할 때 나타나는 메뉴가입니다. 바로 가기 메뉴의 명령을 다른 메뉴나 도구 모음에 명령으로 동일 하 게 동작 합니다. 바로 가기 메뉴를 지원 하기 위해 XML 명령 테이블 (.vsct) 파일에 지정 및 마우스 오른쪽 마우스 단추에 표시 합니다.
도구 창으로 구성 되어 Windows Presentation Foundation (WPF) 사용자 정의 컨트롤에서 상속 된 사용자 지정 도구 창 클래스에 ToolWindowPane.
이 연습에서는 메뉴 항목이.vsct 파일에 선언 하 고 다음 패키지 관리 프레임 워크를 사용 하 여 도구 창을 정의 하는 클래스에서 구현 하 여 Visual Studio 메뉴로 바로 가기 메뉴를 만드는 방법을 보여 줍니다. 이 방법은 Visual Studio 명령, UI 요소 및 자동화 개체 모델에 액세스할 수 수 있습니다.
또는 바로 가기 메뉴를 Visual Studio 기능에 액세스 하지 않는 경우 사용할 수 있습니다의 ContextMenu 에서 XAML 요소에 사용자 정의 컨트롤의 속성입니다. 자세한 내용은 ContextMenu를 참조하십시오.
사전 요구 사항
이 연습을 완료 하려면 설치 해야 해당 Visual Studio 2010 SDK.
참고
Visual Studio SDK에 대 한 자세한 내용은 참조 하십시오. Visual Studio 개요를 확장합니다..Visual Studio SDK를 다운로드 하는 방법를 참조 하십시오. Visual Studio 확장성 개발자 센터 MSDN 웹 사이트에서.
Visual Studio 패키지 프로젝트 템플릿에 대해 위치
Visual Studio 패키지 프로젝트 서식 파일에에서 사용할 수 있는 새 프로젝트 대화 상자:
아래에서 Visual Basic 확장성. 프로젝트의 기본 언어는 Visual Basic입니다.
아래에서 C# 확장성. 프로젝트의 기본 언어는 C#입니다.
아래에서 기타 프로젝트 형식 확장. 프로젝트의 기본 언어는 c + +입니다.
도구 창 바로 가기 메뉴 패키지 만들기
MyTWGradientPackage Vspackage를 만들려면
명명 된 Visual Studio 패키지 프로젝트 만들기 TWShortcutMenu.
패키지 마법사에서 언어 Visual Basic 또는 C#으로 설정 합니다.
도구 창을 만드는 옵션을 선택 합니다.
도구 창을 색 변경 창 이름을 지정 하 고 집합의 명령 ID를 cmdidColorChange.
바로 가기 메뉴를 지정합니다.
등이 연습에 사용자가 바로 가기 메뉴 도구 창의 배경을 채우는 데 사용 되는 색 목록에서 선택 합니다.
바로 가기 메뉴를 만들려면
Mytwgradientpackage.vsct를 엽니다.
에 기호 요소에 GuidSymbol "guidTWShortcutMenuCmdSet" 라는 요소를 선언 메뉴 옵션, 바로 가기 메뉴 및 바로 가기 메뉴 그룹은 다음과 같이 합니다.
<IDSymbol name="ColorMenu" value="0x1000"/> <IDSymbol name="ColorGroup" value="0x1100"/> <IDSymbol name="cmdidRed" value="0x102"/> <IDSymbol name="cmdidYellow" value="0x103"/> <IDSymbol name="cmdidBlue" value="0x104"/>
직전의 그룹 요소를 만들는 메뉴 요소 다음 바로 가기 메뉴에서 정의 합니다.
<Menus> <Menu guid="guidTWShortcutMenuCmdSet" id="ColorMenu" type="Context"> <Strings> <ButtonText>Color change</ButtonText> <CommandName>ColorChange</CommandName> </Strings> </Menu> </Menus>
바로 가기 메뉴의 메뉴 또는 도구 모음 아니기 때문에 부모가 없습니다.
에 Groups 요소를 정의 그룹 바로 가기 메뉴 항목을 포함 하는 그룹 사용 하 여 바로 가기 메뉴를 연결 합니다. 요소.
<Group guid="guidTWShortcutMenuCmdSet" id="ColorGroup"> <Parent guid="guidTWShortcutMenuCmdSet" id="ColorMenu"/> </Group>
에 단추 요소를 표시할 개별 명령을 바로 가기 메뉴에서 정의 합니다.
<Button guid="guidTWShortcutMenuCmdSet" id="cmdidRed" priority="1" type="Button"> <Parent guid="guidTWShortcutMenuCmdSet" id="ColorGroup" /> <Strings> <ButtonText>Red</ButtonText> </Strings> </Button> <Button guid="guidTWShortcutMenuCmdSet" id="cmdidYellow" priority="3" type="Button"> <Parent guid="guidTWShortcutMenuCmdSet" id="ColorGroup" /> <Strings> <ButtonText>Yellow</ButtonText> </Strings> </Button> <Button guid="guidTWShortcutMenuCmdSet" id="cmdidBlue" priority="5" type="Button"> <Parent guid="guidTWShortcutMenuCmdSet" id="ColorGroup" /> <Strings> <ButtonText>Blue</ButtonText> </Strings> </Button>
PkgCmdID.vb 또는 Pkgcmdid.cs를 엽니다.
바로 가기 메뉴 및 메뉴 항목의 정의 추가 합니다.
public const int ColorMenu = 0x1000; public const int cmdidRed = 0x102; public const int cmdidYellow = 0x103; public const int cmdidBlue = 0x104;
이러한 정의 된 동일한 명령 Id입니다 있는 Symbols TWShortcutMenu.vsct 파일의. .Vsct 파일에만 필요 하므로 컨텍스트 그룹이 않습니다.
솔루션을 저장하고 빌드합니다.
바로 가기 메뉴를 구현합니다.
이 섹션에서는 바로 가기 메뉴와 해당 명령을 구현합니다.
바로 가기 메뉴를 구현 하려면
MyToolWindow.vb 또는 Mytoolwindow.cs를 엽니다.
MyToolWindow 클래스에 메뉴 명령 서비스를 액세스할 수 있지만 사용자가 제어를 호스트 하지 않습니다. 다음 세 단계 메뉴 명령 서비스 인스턴스의 도구 창에서 사용자 정의 컨트롤에 사용 하는 방법을 보여 줍니다.
System.ComponentModel.Design 네임스페이스 추가
using System.ComponentModel.Design;
메뉴 명령 서비스의 인스턴스를 저장 하기 위한 변수를 추가 합니다.
internal OleMenuCommandService mcs;
생성자의 끝에 메뉴 명령 서비스에 대 한 호출을 추가 하 고 호출을 수정 base.Content, 다음과 같이 합니다.
mcs = GetService(typeof(IMenuCommandService)) as OleMenuCommandService; base.Content = new MyControl(this);
생성자에서 호출 하는 메뉴 명령 서비스 도구 창이 열려 있을 때마다 메모리에 인지 확인 합니다. 도구 창의 인스턴스 컨트롤 생성자에 매개 변수로 전달 도구 창 클래스의 멤버를 호출 하 여 제어할 수 있습니다.
Mycontrol.xaml를 엽니다.
이 파일은 도구 창에 표시 되는 사용자 정의 컨트롤을 나타냅니다.
추가 된 MouseRightButtonDown 상위 수준 이벤트 UserControl 요소입니다.
MouseRightButtonDown="MyToolWindow_MouseRightButtonDown"
방금 추가한 이벤트 선언을 마우스 오른쪽 단추로 누르고 이벤트 처리기 탐색.
이 MyControl.xaml.vb 또는 MyControl.xaml.cs 열리고 이벤트 처리기 스텁을 만듭니다.
MyControl 맨 추가 Microsoft.VisualStudio.Shell 및 System.ComponentModel.Design 네임 스페이스입니다.
using Microsoft.VisualStudio.Shell; using System.ComponentModel.Design;
부모 도구 창에 대 한 참조를 저장 하는 필드를 추가 하 고 생성자를 다음과 같이 수정 합니다.
MyToolWindow _parent; public MyControl(MyToolWindow parent) { InitializeComponent(); _parent = parent; OleMenuCommandService mcs = this._parent.mcs; if (null != mcs) { // Create an alias for the command set guid. Guid g = GuidList.guidTWShortcutMenuCmdSet; // Create the command IDs. var red = new CommandID(g, PkgCmdIDList.cmdidRed); var yellow = new CommandID(g, PkgCmdIDList.cmdidYellow); var blue = new CommandID(g, PkgCmdIDList.cmdidBlue); // Add a command for each command ID. mcs.AddCommand(new MenuCommand(ChangeColor, red)); mcs.AddCommand(new MenuCommand(ChangeColor, yellow)); mcs.AddCommand(new MenuCommand(ChangeColor, blue)); } }
이제 생성자 부모 도구 창의 인스턴스를 매개 변수로 사용 하 고 저장의 _parent 필드입니다. 그런 다음 만듭니다 CommandID 명령에서 개체 GUID를 설정 하는 PkgCmdList .vsct 파일에 정의 된 메뉴 명령을 나타내는 값입니다. 마지막으로, 메뉴 명령 서비스에 명령 추가 및 이벤트 처리기를 할당 합니다.
구현에서 MyToolWindowMouseRightButtonDown 같이 이벤트 합니다.
private void MyToolWindow_MouseRightButtonDown(object sender, MouseButtonEventArgs e) { OleMenuCommandService mcs = this._parent.mcs; if (null != mcs) { CommandID menuID = new CommandID( GuidList.guidTWShortcutMenuCmdSet, PkgCmdIDList.ColorMenu); Point p = this.PointToScreen(e.GetPosition(this)); mcs.ShowContextMenu(menuID, (int)p.X, (int)p.Y); } }
이 CommandID 개체의 바로 가기 메뉴에 대 한 마우스 클릭의 위치를 식별 하 고 사용 하 여 해당 위치에 바로 가기 메뉴를 열고를 ShowContextMenu 메서드.
사용자가 클릭할 때 메뉴 항목의 생성자에 정의 된 이벤트를 구현 합니다.
private void ChangeColor(object sender, EventArgs e ) { var mc = sender as MenuCommand; switch (mc.CommandID.ID) { case PkgCmdIDList.cmdidRed: MyToolWindow.Background = Brushes.Red; break; case PkgCmdIDList.cmdidYellow: MyToolWindow.Background = Brushes.Yellow; break; case PkgCmdIDList.cmdidBlue: MyToolWindow.Background = Brushes.Blue; break; } }
이 경우 하나의 메서드를 모든 메뉴 항목에 대 한 이벤트 처리 하 여 확인 하 여 해당 CommandID 및 배경 색상을 적절 하 게 설정 합니다. 메뉴 항목 관련된 명령이 포함 되어 있는 경우 각 명령에 대 한 별도 이벤트 처리기를 만들 것입니다.
도구 창 기능 테스트
이 섹션에서는이 연습에서 추가 된 기능을 설명 하는 방법을 보여 줍니다.
도구 창 기능을 테스트 하려면
실험적인 인스턴스를 열고 F5 키를 눌러 Visual Studio.
실험적인 인스턴스에서는 보기 메뉴를 클릭 다른 창 하 고 다음을 클릭 색상 변경 창. 이 수행 하 여 도구 창을 표시 되어야 합니다.
도구 창 배경에서 단추를 마우스 오른쪽 단추로 클릭 합니다. 이 색은 목록 바로 가기 메뉴를 표시 합니다.
바로 가기 메뉴에서 색을 클릭 합니다. 사라져야 합니다 바로 가기 메뉴를 한 도구 창의 배경색이 선택한 색으로 변경 해야 합니다.
다음 단계
.Vsct 파일을 수정 하 여 바로 가기 메뉴를 변경 하는 경우 MyTWGradientPackageUI 프로젝트를 다시 빌드해야 합니다. 이 강제로.vsct 파일을 다시 컴파일해야 합니다와 위성 DLL의.vsct 파일에 대 한 변경 내용으로 대체 합니다.