Araç penceresine kısayol menüsü ekleme

Bu kılavuz, araç penceresine bir kısayol menüsü yerleştirir. Kısayol menüsü, kullanıcı bir düğmeye, metin kutusuna veya pencere arka planına sağ tıkladığında görüntülenen bir menüdür. Kısayol menüsündeki komutlar, diğer menülerdeki veya araç çubuklarındaki komutlarla aynı şekilde davranır. Kısayol menüsünü desteklemek için , .vsct dosyasında belirtin ve farenin sağ tıklamasına yanıt olarak görüntüleyin.

Araç penceresi, öğesinden devralan özel bir araç penceresi sınıfında wpf kullanıcı denetiminden ToolWindowPaneoluşur.

Bu kılavuz, .vsct dosyasında menü öğelerini bildirerek ve ardından Yönetilen Paket Çerçevesi'ni kullanarak bunları araç penceresini tanımlayan sınıfta uygulayarak Visual Studio menüsü olarak bir kısayol menüsünün nasıl oluşturulacağını gösterir. Bu yaklaşım Visual Studio komutlarına, kullanıcı arabirimi öğelerine ve Otomasyon nesne modeline erişimi kolaylaştırır.

Alternatif olarak, kısayol menünüzün Visual Studio işlevselliğine erişmemesi durumunda, kullanıcı denetimindeki bir XAML öğesinin özelliğini kullanabilirsiniz ContextMenu . Daha fazla bilgi için bkz . ContextMenu.

Araç penceresi kısayol menü paketi oluşturma

  1. adlı TWShortcutMenu bir VSIX projesi oluşturun ve buna ShortcutMenu adlı bir araç penceresi şablonu ekleyin. Araç penceresi oluşturma hakkında daha fazla bilgi için bkz . Araç penceresiyle uzantı oluşturma.

Kısayol menüsünü belirtme

Bu kılavuzda gösterilen menü gibi bir kısayol menüsü, kullanıcının araç penceresinin arka planını doldurmak için kullanılan renk listesinden seçim yapmasını sağlar.

  1. ShortcutMenuPackage.vsct içinde guidShortcutMenuPackageCmdSet adlı GuidSymbol öğesini bulun ve kısayol menüsünü, kısayol menü grubunu ve menü seçeneklerini bildirin. GuidSymbol öğesi şimdi şöyle görünmelidir:

    <GuidSymbol name="guidShortcutMenuPackageCmdSet" value="{00000000-0000-0000-0000-0000}"> // your GUID here
        <IDSymbol name="ShortcutMenuCommandId" value="0x0100" />
        <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"/>
    </GuidSymbol>
    
  2. Düğmeler öğesinden hemen önce bir Menus öğesi oluşturun ve içindeki kısayol menüsünü tanımlayın.

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

    Bir menü veya araç çubuğunun parçası olmadığından kısayol menüsünün üst öğesi yoktur.

  3. Kısayol menü öğelerini içeren bir Grup öğesiyle bir Groups öğesi oluşturun ve grubu kısayol menüsüyle ilişkilendirin.

    <Groups>
        <Group guid="guidShortcutMenuPackageCmdSet" id="ColorGroup">
            <Parent guid="guidShortcutMenuPackageCmdSet" id="ColorMenu"/>
        </Group>
    </Groups>
    
  4. Düğmeler öğesinde, kısayol menüsünde görünecek tek tek komutları tanımlayın. Buttons öğesi şu şekilde görünmelidir:

    <Buttons>
        <Button guid="guidShortcutMenuPackageCmdSet" id="ShortcutMenuCommandId" priority="0x0100" type="Button">
            <Parent guid="guidSHLMainMenu" id="IDG_VS_WNDO_OTRWNDWS1"/>
            <Icon guid="guidImages" id="bmpPic1" />
            <Strings>
                <ButtonText>ShortcutMenu</ButtonText>
            </Strings>
        </Button>
    
        <Button guid="guidShortcutMenuPackageCmdSet" id="cmdidRed" priority="1" type="Button">
            <Parent guid="guidShortcutMenuPackageCmdSet" id="ColorGroup" />
            <Strings>
                <ButtonText>Red</ButtonText>
            </Strings>
        </Button>
    
        <Button guid="guidShortcutMenuPackageCmdSet" id="cmdidYellow" priority="3" type="Button">
            <Parent guid="guidShortcutMenuPackageCmdSet" id="ColorGroup" />
            <Strings>
                <ButtonText>Yellow</ButtonText>
            </Strings>
        </Button>
    
        <Button guid="guidShortcutMenuPackageCmdSet" id="cmdidBlue" priority="5" type="Button">
            <Parent guid="guidShortcutMenuPackageCmdSet" id="ColorGroup" />
            <Strings>
                <ButtonText>Blue</ButtonText>
            </Strings>
        </Button>
    </Buttons>
    
  5. ShortcutMenuCommand.cs içinde, komut kümesi GUID'sinin, kısayol menüsünün ve menü öğelerinin tanımlarını ekleyin.

    public const string guidShortcutMenuPackageCmdSet = "00000000-0000-0000-0000-00000000"; // your GUID will differ
    public const int ColorMenu = 0x1000;
    public const int cmdidRed = 0x102;
    public const int cmdidYellow = 0x103;
    public const int cmdidBlue = 0x104;
    

    Bunlar, ShortcutMenuPackage.vsct dosyasının Simgeler bölümünde tanımlanan komut kimlikleriyle aynıdır. Bağlam grubu buraya eklenmez çünkü yalnızca .vsct dosyasında gereklidir.

Kısayol menüsünü uygulama

Bu bölüm, kısayol menüsünü ve komutlarını uygular.

  1. ShortcutMenu.cs dosyasında araç penceresi menü komut hizmetini alabilir, ancak içerdiği denetim alamaz. Aşağıdaki adımlar, menü komut hizmetinin kullanıcı denetimi için nasıl kullanılabilir hale getireceğini gösterir.

  2. ShortcutMenu.cs'de aşağıdaki yönergeleri kullanarak ekleyin:

    using Microsoft.VisualStudio.Shell;
    using System.ComponentModel.Design;
    
  3. Menü komut hizmetini almak ve denetimi eklemek için araç penceresinin Initialize() yöntemini geçersiz kılarak menü komut hizmetini oluşturucuya geçirin:

    protected override void Initialize()
    {
        var commandService = (OleMenuCommandService)GetService(typeof(IMenuCommandService));
        Content = new ShortcutMenuControl(commandService);
    }
    
  4. ShortcutMenu araç penceresi oluşturucusunda, denetimi ekleyen çizgiyi kaldırın. Oluşturucu şimdi şöyle görünmelidir:

    public ShortcutMenu() : base(null)
    {
        this.Caption = "ShortcutMenu";
        this.BitmapResourceID = 301;
        this.BitmapIndex = 1;
    }
    
  5. ShortcutMenuControl.xaml.cs içinde, menü komut hizmeti için özel bir alan ekleyin ve menü komut hizmetini alacak şekilde denetim oluşturucusunu değiştirin. Ardından menü komut hizmetini kullanarak bağlam menüsü komutlarını ekleyin. ShortcutMenuControl oluşturucu artık aşağıdaki kod gibi görünmelidir. Komut işleyicisi daha sonra tanımlanacaktır.

    public ShortcutMenuControl(OleMenuCommandService service)
    {
        this.InitializeComponent();
        commandService = service;
    
        if (null !=commandService)
        {
            // Create an alias for the command set guid.
            Guid guid = new Guid(ShortcutMenuCommand.guidShortcutMenuPackageCmdSet);
    
            // Create the command IDs.
            var red = new CommandID(guid, ShortcutMenuCommand.cmdidRed);
            var yellow = new CommandID(guid, ShortcutMenuCommand.cmdidYellow);
            var blue = new CommandID(guid, ShortcutMenuCommand.cmdidBlue);
    
            // Add a command for each command ID.
            commandService.AddCommand(new MenuCommand(ChangeColor, red));
            commandService.AddCommand(new MenuCommand(ChangeColor, yellow));
            commandService.AddCommand(new MenuCommand(ChangeColor, blue));
        }
    }
    
  6. ShortcutMenuControl.xaml içinde en üst düzey UserControl öğesine bir MouseRightButtonDown olay ekleyin. XAML dosyası şimdi şöyle görünmelidir:

    <UserControl x:Class="TWShortcutMenu.ShortcutMenuControl"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            Background="{DynamicResource VsBrush.Window}"
            Foreground="{DynamicResource VsBrush.WindowText}"
            mc:Ignorable="d"
            d:DesignHeight="300" d:DesignWidth="300"
            Name="MyToolWindow"
            MouseRightButtonDown="MyToolWindow_MouseRightButtonDown">
        <Grid>
            <StackPanel Orientation="Vertical">
                <TextBlock Margin="10" HorizontalAlignment="Center">ShortcutMenu</TextBlock>
            </StackPanel>
        </Grid>
    </UserControl>
    
  7. ShortcutMenuControl.xaml.cs içinde, olay işleyicisi için bir saplama ekleyin.

    private void MyToolWindow_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
    {
    . . .
    }
    
  8. Aşağıdaki using yönergelerini aynı dosyaya ekleyin:

    using Microsoft.VisualStudio.Shell;
    using System.ComponentModel.Design;
    using System;
    using System.Windows.Input;
    using System.Windows.Media;
    
  9. MyToolWindowMouseRightButtonDown Olayı aşağıdaki gibi uygulayın.

    private void MyToolWindow_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
    {
        if (null != commandService)
        {
            CommandID menuID = new CommandID(
                new Guid(ShortcutMenuCommand.guidShortcutMenuPackageCmdSet),
                ShortcutMenuCommand.ColorMenu);
            Point p = this.PointToScreen(e.GetPosition(this));
            commandService.ShowContextMenu(menuID, (int)p.X, (int)p.Y);
        }
    }
    

    Bu, kısayol menüsü için bir CommandID nesne oluşturur, fare tıklamasının konumunu tanımlar ve yöntemini kullanarak ShowContextMenu kısayol menüsünü bu konumda açar.

  10. Komut işleyicisini uygulayın.

    private void ChangeColor(object sender, EventArgs e)
    {
        var mc = sender as MenuCommand;
    
        switch (mc.CommandID.ID)
        {
            case ShortcutMenuCommand.cmdidRed:
                MyToolWindow.Background = Brushes.Red;
                break;
            case ShortcutMenuCommand.cmdidYellow:
                MyToolWindow.Background = Brushes.Yellow;
                break;
            case ShortcutMenuCommand.cmdidBlue:
                MyToolWindow.Background = Brushes.Blue;
                break;
        }
    }
    

    Bu durumda, yalnızca bir yöntem, öğesini tanımlayıp CommandID arka plan rengini uygun şekilde ayarlayarak tüm menü öğeleri için olayları işler. Menü öğeleri ilişkisiz komutlar içerseydi, her komut için ayrı bir olay işleyicisi oluştururdunuz.

Araç penceresi özelliklerini test edin

  1. Projeyi derleyin ve hata ayıklamaya başlayın. Deneysel örnek görüntülenir.

  2. Deneysel örnekte Görünüm /Diğer Windows'a ve ardından ShortcutMenu'ya tıklayın. Bunu yaptığınızda araç pencereniz görüntülenir.

  3. Araç penceresinin gövdesine sağ tıklayın. Renk listesi içeren bir kısayol menüsü görüntülenmelidir.

  4. Kısayol menüsünde bir renge tıklayın. Araç penceresi arka plan rengi seçili renge değiştirilmelidir.