Angenommen, wir haben ein VSPackage mit einer Symbolleiste und ein paar Befehlen in der Symbolleiste. Wie können Sie einen der Befehle auf der Symbolleiste programmatisch ein-/ausblenden? Wenn Sie ein Benutzer sind, können Sie das tun, indem Sie die Symbolleiste anpassen. Daher habe ich das starke Gefühl, dass es auch aus dem Code einen Weg geben muss, dies zu tun.Dynamische Anzeige benutzerdefinierter Visual Studio VSPackage-Befehl in der Symbolleiste
Da wir kein AddIn entwickeln, können wir DTE.Commands.AddNamedCommand(AddInInstance, Name, ButtonText, ToolTip, MSOButton)
nicht verwenden.
Das ist alles in Ordnung, weil wir immer noch unsere Befehle mit der Visual Studio-Befehlstabelle (.vsct) Format definieren können, und das ist der vorgeschlagene Weg für VSPackages:
<?xml version="1.0" encoding="utf-8"?>
<CommandTable xmlns="http://schemas.microsoft.com/VisualStudio/2005-10-18/CommandTable" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<Extern href="vsshlids.h" />
<Commands package="testPackage">
<Menus> <!-- Define the menus, toolbars, etc. -->
<Menu guid="commands" id="toolbar" type="Toolbar">
<Parent guid="guidSHLMainMenu" id="IDG_VS_BUILD_SOLUTION" />
<CommandFlag>DefaultDocked</CommandFlag>
<Strings>
<ButtonText>TestToolbar</ButtonText>
</Strings>
</Menu>
</Menus>
<Groups> <!-- Define the groups for commands -->
<Group guid="commands" id="toolbarGroup" priority="0x0001">
<Parent guid="commands" id="toolbar" />
</Group>
</Groups>
<Buttons> <!-- Define the commands as buttons -->
<Button guid="commands" id="button0" type="Button">
<Parent guid="commands" id="toolbarGroup" />
<CommandFlag>DynamicVisibility</CommandFlag>
<Strings>
<ButtonText>TestButton0</ButtonText>
</Strings>
</Button>
<Button guid="commands" id="button1" type="Button">
<Parent guid="commands" id="toolbarGroup" />
<CommandFlag>DynamicVisibility</CommandFlag>
<Strings>
<ButtonText>TestButton1</ButtonText>
</Strings>
</Button>
</Buttons>
</Commands>
<Symbols>
<GuidSymbol name="testPackage" value="{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}" />
<GuidSymbol name="commands" value="{EEEEEEEE-EEEE-EEEE-EEEE-EEEEEEEEEEEE}">
<IDSymbol name="toolbar" value="0x0100" />
<IDSymbol name="toolbarGroup" value="0x0010" />
<IDSymbol name="button0" value="0x0000" />
<IDSymbol name="button1" value="0x0001" />
</GuidSymbol>
</Symbols>
</CommandTable>
Später auf dem C# -Code Sie verschiedene Eigenschaften eines MenuCommand einstellen können wir oben gerade definiert haben:
System.ComponentModel.Design.MenuCommand menuCommand = <Acquire your menu command>;
menuCommand.Enabled = <enabled>;
menuCommand.Visible = <visible>;
menuCommand.Supported = <supported>;
das Problem ist, dass, wenn der Menübefehl auf einer Symbolleiste platziert wird, dann würde die Visible-Eigenschaft falsch machen die Taste nicht verbergen, j macht es grau. (Es ist in allen anderen Menüs in Ordnung.) Dies ist eine Funktion von Visual Studio, kein Fehler.
Aber was ich brauche, ist genau das: Verstecken Button0. (Nehmen wir an Button0 wird nur angezeigt, wenn eine spezielle Bedingung zutrifft, zB: Sie haben weniger Platz auf Ihrer Festplatte als X MB oder wenn Sie ein anderes Werkzeug installiert haben oder einfach Ihre eigene Bedingung erstellen.)
Man könnte die folgende Technik aus der AddIn mal mit der Taste löschen, wenn sie nicht benötigt:
EnvDTE.Command button0 = DTE.Commands.Item(commandsGuid, button0CommandId); // Both are the same as in the .vsct file
if (button0 != null)
button0.Delete();
Command0 gefunden wird, aber wenn zu löschen versucht, ich habe eine Ausnahme bekommt: Unbekannten Fehler (Ausnahme von HRESULT: 0x80004005 (E_FAIL)) Schließlich macht es irgendwie Sinn, da es wurde über den .vsct-Mechanismus erstellt, nicht programmgesteuert.
Ich habe keine Ideen mehr. Bitte helfen Sie mir herauszufinden, wie man Symbolleistenschaltflächen zur Laufzeit programmatisch ausblenden/anzeigen oder hinzufügen/entfernen kann. Gibt es eine andere Möglichkeit, die VSPackage-Befehle als die .vsct-Datei zu definieren?
Jede Hilfe wird geschätzt.
Ich habe das gleiche Problem. Ich habe auch versucht, Abschnitt der vsct-Datei zu verwenden, aber ohne Erfolg. Hast du damit Fortschritte gemacht? –
Przemaas
@ Przemaas wir mit dem deaktivierten Symbol (ausgegraut) festgefahren.Niemals herausgefunden, wie man es verschwinden lässt, da es Aufgaben mit höherer Priorität gegeben hat. – Shakaron
https://stackoverflow.com/questions/14572226/hiding-a-button-from-a-plugin-toolbar/ –