Frage

Ich habe als eine Add-in für VS2008 / 2010 eine Visual Studio-Erweiterung zu entwickeln. Die neue Version ist jetzt nur als VSIX Paket für VS2010 getan werden (da es .NET 4 sowieso sein), und ich einige Probleme mit mit (ziemlich einfach, würde ich denken) UI Handhabung.

Die Erweiterung besteht in erster Linie aus einer Symbolleiste mit einigen Tasten, die verschiedene Aktionen starten, Formulare usw., und ein paar, die nur als Etikett verwendet werden einige Statusinformationen angezeigt werden soll. Die „label“ Tasten selbst zeigen nur sehr kurz und prägnant Informationen, während die Tooltips Präzisierungen.

Während ich nicht glaubte, die ganze Add-in, was sehr elegant war, macht diese Art von Sachen war ziemlich einfach (obwohl mein Ansatz ein wenig laienhaft gewesen sein mag). Wenn die Befehle in die Symbolleiste hinzufügen, würde ich auf „Speicher“ die „label“ Tasten in bestimmten lokalen Variablen, so dass ich später die Beschriftung und Tooltip-Text nach Belieben festgelegt.

In einem VSPackage, das äquivalent zu Microsoft.VisualStudio.CommandBars.CommandBarButton erscheint OleMenuCommand zu sein. Das Finden der "label" Befehl durch die MenuCommandService ist kein Problem, ändern sie wie nötig, aber.

Für die Zwecke herauszufinden, wie dies zu tun, ich habe nur eine Symbolleiste mit zwei Tasten in einer Gruppe. btnAction ist sehr einfach; nur ein Symbol und eine Ausführungs Handler den Text auf der anderen Taste zu ändern, ohne CommandFlags. btnLabel sieht wie folgt in der .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>

Das erste Problem dabei ist, dass wenn ich TextChanges , die ToolTipText string ignoriert und die Button wird zunächst für den Tooltip verwendet als auch.

Der Handler Code für die Aktionstaste ist wie folgt:

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";
}

Dies ändert die Beschriftung von btnLabel wie erwartet, aber da gibt es keine Möglichkeit, explizit den Tooltip spezifiziert (die OleMenuCommand Objekt nur hat eine Text Eigenschaft, im Gegensatz zu CommandBarButton , die sowohl Beschriftung und TooltipText ), wird der Tooltip immer auf die gleiche Zeichenfolge als Beschriftung festgelegt. Von dem, was ich verstehe, ist dies, weil mit Findcommand () Ich bin eigentlich nicht der UI-Knopf bekommen, sondern nur die zugrunde liegende Befehl, der nicht über Tooltips schert.

Was ist noch verwirrend ist, was passiert, wenn ich die verwenden TextChangesButton CommandFlag anstelle von TextChanges . Die Schaltfläche wird nun korrekt den Tooltip-Text in der .vsct definiert angezeigt, aber weder die Beschriftung noch der Tooltip wird sich ändern, wenn ich die andere Schaltfläche klicken - obwohl, wenn ich das überprüfen btnLabel Befehl des Text Eigenschaft wird festgelegt, was ich erwarten ( „Clicked x-mal“). Does TextChangesButton Art „entkoppeln“ die Eigenschaften des Befehls und die Schaltfläche? Wenn ja, das ist ziemlich viel, was ich will (ich kümmere mich nicht um den Befehl, da es nichts ist sowieso auszuführen; btnLabel wird immer deaktiviert sein), aber wie kann ich den Knopf zugreifen und seine bestimmte Zeichenfolge Eigenschaften?

Ich sah durch die verschiedenen IVs Schnittstellen und SVs Dienste konnte aber nicht etwas angemessen, und die Dokumentation (und IntelliSense-Hilfe) nicht zu sein scheinen sehr umfangreich.

finden
War es hilfreich?

Lösung

Um diese selbst zu beantworten - nach jemandem aus dem VS-Team, die neue Erweiterungsstruktur bietet keine Möglichkeiten, um Zugang diese Eigenschaften von Kontrollen in einem solchen Detail. Für das, was ich es wird notwendig sein, geht die altmodische Art und Weise der habhaft des DTE-Objekts erreichen will, meine Toolbar und meine Steuerelemente zu finden und einfach als CommandBarButtons zu behandeln, so wie ich in meiner Add-in habe.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top