Pergunta

Tenho vindo a desenvolver uma extensão do Visual Studio como um Add-in para o VS2008/2010.A nova versão agora é para ser feito como um VSIX pacote para o VS2010 apenas (como tem que ser .NET 4 assim mesmo), e eu estou tendo alguns problemas com o (bastante simples), eu acho) INTERFACE de manipulação.

A extensão é constituída principalmente de uma barra de ferramentas com alguns botões que o lançamento de várias ações, formas etc., e alguns que são usados apenas como rótulos para exibir algumas informações de estado.O "rótulo" botões de se mostrar muito curta e concisa informação, enquanto que as dicas de ferramentas fornecem mais detalhes.

Enquanto eu não acho que todo Suplemento coisa foi muito elegante, fazendo esse tipo de coisa era bastante simples (embora o meu abordagem pode ter sido um pouco amadora).Ao adicionar os comandos para a barra de ferramentas, gostaria de "salvar" o "rótulo" botões específicos, variáveis locais, permitindo-me para, posteriormente, definir a legenda e o texto de dica de ferramenta à vontade.

Em um VSPackage, o equivalente a A Microsoft.VisualStudio.CommandBars.CommandBarButton parece ser OleMenuCommand.Encontrar o "rótulo" de comando através do MenuCommandService não é problema, modificando-o conforme necessário é, no entanto.

Com a finalidade de descobrir como fazer isso, eu só tenho uma barra de ferramentas com dois botões em um grupo. btnAction é muito simples;apenas um ícone e um manipulador execute para alterar o texto no outro botão, não CommandFlags.btnLabel olha como esse .vsct:

<Button guid="guidVSPackageBuilderTutorialCommandSet" id="btnLabel" priority="0x0100">
    <CommandFlag>DefaultDisabled</CommandFlag>
    <CommandFlag>DontCache</CommandFlag>
    <CommandFlag>NoCustomize</CommandFlag>
    <CommandFlag>TextChanges</CommandFlag>
    <CommandFlag>TextOnly</CommandFlag>
    <Strings>
        <CommandName>cmdidbtnLabel</CommandName>
        <ButtonText>btnLabel</ButtonText>
        <MenuText>btnLabel</MenuText>
        <ToolTipText>Tooltip btnLabel</ToolTipText>
    </Strings>
</Button>

O primeiro problema com isso é que, quando eu uso TextChanges, o ToolTipText cadeia é ignorado e o ButtonText inicialmente é usada para a dica de ferramenta bem.

O manipulador de código para o botão de ação é o seguinte:

private int iClickCount = 0;

protected override void btnActionExecuteHandler(object sender, EventArgs e)
{
    var svc = GetService(typeof(IMenuCommandService)) as OleMenuCommandService;

    CommandID idBtnLabel = new CommandID(GuidList.guidVSPackageBuilderTutorialCmdSet, (int)PkgCmdIDList.btnLabel);
    var cmd = svc.FindCommand(idBtnLabel) as OleMenuCommand;

    cmd.Text = "Clicked " + (++iClickCount) + " times";
}

Isto altera a legenda de btnLabel como esperado, mas como não há nenhuma maneira de especificar explicitamente a descrição (o OleMenuCommand objeto apenas tem um Texto propriedade, ao contrário de CommandBarButton, que tem tanto Legenda e TooltipText), a descrição é sempre definido para a mesma cadeia de caracteres, conforme a legenda.Pelo que eu entendo, isso é porque com FindCommand() eu não estou realmente ficando a INTERFACE do usuário botão, mas apenas o comando subjacente, que não se preocupa com as dicas.

O que é ainda mais confuso é o que acontece quando eu uso o TextChangesButton CommandFlag em vez de TextChanges.O botão irá agora exibir corretamente o texto de dica de ferramenta definida no .vsct, mas nem legenda nem a descrição vai mudar quando eu clicar no botão - mas quando eu verificar o btnLabel comando Texto propriedade, é definido como aquilo que eu esperava ("Clicado x vezes").Não TextChangesButton espécie de "separar" as propriedades do comando e o botão ?Se sim, este é praticamente o que eu quero (eu não me importo sobre o comando, como não há nada a executar, de qualquer forma; btnLabel sempre vai ser desativado), mas como posso acessar o botão de sua cadeia de propriedades ?

Eu olhei através de vários IVs e interfaces SVs serviços, mas não consegui encontrar algo apropriado, e de documentação (e o IntelliSense ajuda) não parece ser muito extensa.

Foi útil?

Solução

Para responder isso mesmo - de acordo com alguém do VS team, o novo extensibilidade estrutura não oferecer meios para aceder a estas propriedades de controlo em tais detalhes.Para o que eu quero alcançá-lo será necessário ir a antiga forma de se apoderar do objeto DTE, de encontrar a minha barra de ferramentas e meus controles e simplesmente tratá-los como CommandBarButtons, assim como fiz no meu Add-in.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top