다음을 통해 공유


연습: 도구 창 바로 가기 메뉴 구현

이 연습에서는 바로 가기 메뉴 도구 창에 배치 됩니다. 바로 가기 메뉴에는 단추, 텍스트 상자 또는 창 배경 그래픽 사용자 인터페이스 (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 패키지 프로젝트 서식 파일에에서 사용할 수 있는 새 프로젝트 대화 상자:

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

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

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

도구 창 바로 가기 메뉴 패키지 만들기

MyTWGradientPackage Vspackage를 만들려면

  • 명명 된 Visual Studio 패키지 프로젝트 만들기 TWShortcutMenu.

    1. 패키지 마법사에서 언어 Visual Basic 또는 C#으로 설정 합니다.

    2. 도구 창을 만드는 옵션을 선택 합니다.

    3. 도구 창을 색 변경 창 이름을 지정 하 고 집합의 명령 ID를 cmdidColorChange.

바로 가기 메뉴를 지정합니다.

등이 연습에 사용자가 바로 가기 메뉴 도구 창의 배경을 채우는 데 사용 되는 색 목록에서 선택 합니다.

바로 가기 메뉴를 만들려면

  1. Mytwgradientpackage.vsct를 엽니다.

  2. 기호 요소에 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"/>
    
  3. 직전의 그룹 요소를 만들는 메뉴 요소 다음 바로 가기 메뉴에서 정의 합니다.

    <Menus>
      <Menu guid="guidTWShortcutMenuCmdSet" id="ColorMenu" type="Context">
        <Strings>
          <ButtonText>Color change</ButtonText>
          <CommandName>ColorChange</CommandName>
        </Strings>
      </Menu>
    </Menus>
    

    바로 가기 메뉴의 메뉴 또는 도구 모음 아니기 때문에 부모가 없습니다.

  4. 에 Groups 요소를 정의 그룹 바로 가기 메뉴 항목을 포함 하는 그룹 사용 하 여 바로 가기 메뉴를 연결 합니다. 요소.

    <Group guid="guidTWShortcutMenuCmdSet" id="ColorGroup">
      <Parent guid="guidTWShortcutMenuCmdSet" id="ColorMenu"/>
    </Group>
    
  5. 단추 요소를 표시할 개별 명령을 바로 가기 메뉴에서 정의 합니다.

    <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>
    
  6. PkgCmdID.vb 또는 Pkgcmdid.cs를 엽니다.

  7. 바로 가기 메뉴 및 메뉴 항목의 정의 추가 합니다.

    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 파일에만 필요 하므로 컨텍스트 그룹이 않습니다.

  8. 솔루션을 저장하고 빌드합니다.

바로 가기 메뉴를 구현합니다.

이 섹션에서는 바로 가기 메뉴와 해당 명령을 구현합니다.

바로 가기 메뉴를 구현 하려면

  1. MyToolWindow.vb 또는 Mytoolwindow.cs를 엽니다.

    MyToolWindow 클래스에 메뉴 명령 서비스를 액세스할 수 있지만 사용자가 제어를 호스트 하지 않습니다. 다음 세 단계 메뉴 명령 서비스 인스턴스의 도구 창에서 사용자 정의 컨트롤에 사용 하는 방법을 보여 줍니다.

  2. System.ComponentModel.Design 네임스페이스 추가

    using System.ComponentModel.Design;
    
  3. 메뉴 명령 서비스의 인스턴스를 저장 하기 위한 변수를 추가 합니다.

    internal OleMenuCommandService mcs;
    
  4. 생성자의 끝에 메뉴 명령 서비스에 대 한 호출을 추가 하 고 호출을 수정 base.Content, 다음과 같이 합니다.

    mcs = GetService(typeof(IMenuCommandService)) as OleMenuCommandService;
    base.Content = new MyControl(this);
    

    생성자에서 호출 하는 메뉴 명령 서비스 도구 창이 열려 있을 때마다 메모리에 인지 확인 합니다. 도구 창의 인스턴스 컨트롤 생성자에 매개 변수로 전달 도구 창 클래스의 멤버를 호출 하 여 제어할 수 있습니다.

  5. Mycontrol.xaml를 엽니다.

    이 파일은 도구 창에 표시 되는 사용자 정의 컨트롤을 나타냅니다.

  6. 추가 된 MouseRightButtonDown 상위 수준 이벤트 UserControl 요소입니다.

    MouseRightButtonDown="MyToolWindow_MouseRightButtonDown"
    
  7. 방금 추가한 이벤트 선언을 마우스 오른쪽 단추로 누르고 이벤트 처리기 탐색.

    이 MyControl.xaml.vb 또는 MyControl.xaml.cs 열리고 이벤트 처리기 스텁을 만듭니다.

  8. MyControl 맨 추가 Microsoft.VisualStudio.ShellSystem.ComponentModel.Design 네임 스페이스입니다.

    using Microsoft.VisualStudio.Shell;
    using System.ComponentModel.Design;
    
  9. 부모 도구 창에 대 한 참조를 저장 하는 필드를 추가 하 고 생성자를 다음과 같이 수정 합니다.

    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 파일에 정의 된 메뉴 명령을 나타내는 값입니다. 마지막으로, 메뉴 명령 서비스에 명령 추가 및 이벤트 처리기를 할당 합니다.

  10. 구현에서 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 메서드.

  11. 사용자가 클릭할 때 메뉴 항목의 생성자에 정의 된 이벤트를 구현 합니다.

            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 및 배경 색상을 적절 하 게 설정 합니다. 메뉴 항목 관련된 명령이 포함 되어 있는 경우 각 명령에 대 한 별도 이벤트 처리기를 만들 것입니다.

도구 창 기능 테스트

이 섹션에서는이 연습에서 추가 된 기능을 설명 하는 방법을 보여 줍니다.

도구 창 기능을 테스트 하려면

  1. 실험적인 인스턴스를 열고 F5 키를 눌러 Visual Studio.

  2. 실험적인 인스턴스에서는 보기 메뉴를 클릭 다른 창 하 고 다음을 클릭 색상 변경 창. 이 수행 하 여 도구 창을 표시 되어야 합니다.

  3. 도구 창 배경에서 단추를 마우스 오른쪽 단추로 클릭 합니다. 이 색은 목록 바로 가기 메뉴를 표시 합니다.

  4. 바로 가기 메뉴에서 색을 클릭 합니다. 사라져야 합니다 바로 가기 메뉴를 한 도구 창의 배경색이 선택한 색으로 변경 해야 합니다.

다음 단계

.Vsct 파일을 수정 하 여 바로 가기 메뉴를 변경 하는 경우 MyTWGradientPackageUI 프로젝트를 다시 빌드해야 합니다. 이 강제로.vsct 파일을 다시 컴파일해야 합니다와 위성 DLL의.vsct 파일에 대 한 변경 내용으로 대체 합니다.

참고 항목

기타 리소스

명령, 메뉴 및 도구 모음에 대 한 연습

명령, 메뉴 및 도구 모음

서비스