VisualStudio.Extensibility 中的常見概念之一是使用基於上下文的激活規則。 這些規則會控管向使用者顯示延伸模組或命令的條件。 指令組態中的 VisibleWhen 屬性是環境定義型啟動規則的範例,這個屬性宣告指令何時可見。
條件約束類型
每個約束都定義為ActivationConstraint類型的實例,該實例是使用 ActivationConstraint的工廠方法之一建立的,如 ClientContext。
多個啟用條件約束可以使用And、Or和Not方法組合在一起。 您也可以使用運算子 &、 |和 !來組合啟用限制。
範例定義
在下列範例中,命令組態屬性 EnabledWhen 會定義命令何時處於已啟用狀態。 此 ClientContext 方法是激活約束工廠方法之一。 它會產生啟動條件約束,給定兩個引數、字串和正則運算式模式,以與該字串相符。 因此,下列程式碼指出當使用者選取具有其中一個副檔名的檔案時,會啟用命令。
public override CommandConfiguration CommandConfiguration => new("%My command.DisplayName%")
{
EnabledWhen = ActivationConstraint.ClientContext(ClientContextKey.Shell.ActiveSelectionFileName, @"\.(jpg|jpeg|txt)$"),
};
類別提供 ClientContextKey 您可以測試的 IDE 狀態資訊範圍;如需值表,請參閱 用戶端內容索引鍵。
下列範例示範如何結合多個條件約束:
EnabledWhen = ActivationConstraint.And(
ActivationConstraint.SolutionState(SolutionState.Exists),
ActivationConstraint.ClientContext(ClientContextKey.Shell.ActiveEditorFileName, @"\.(jpg|jpeg|txt)$")),
或者,更簡潔地說,使用&運算子:
EnabledWhen =
ActivationConstraint.SolutionState(SolutionState.Exists) &
ActivationConstraint.ClientContext(ClientContextKey.Shell.ActiveEditorFileName, @"\.(jpg|jpeg|txt)$")),
啟用條件約束屬性
啟用條件約束可用來設定各種 VisualStudio.Extensibility 功能,包括 載入延伸模組,以及命令的 已啟用 或 可見 狀態。 配置類型包含類型為 ActivationConstraint 的屬性,通常具有 When 後綴,表示當滿足指定條件時,會啟動某些功能。
啟用條件約束工廠方法
本節顯示目前支援的啟用限制清單。 清單上的每個條目都是ActivationConstraint類型的工廠方法。
| 術語 | Description |
|---|---|
ClientContext(<鍵>=ClientContextKey, <模式>=<正則表達式>) |
當提供的用戶端內容索引鍵符合規則運算式時,為 True。 請參閱 用戶端內容索引鍵。 |
ActiveProjectCapability(<表達式>=ProjectCapability) |
只要解決方案中存在具有符合所提供子運算式功能的專案,此條件即為真。 運算式可以是類似 VB | CSharp的 。 如需專案功能的詳細資訊,請參閱 專案查詢 API 概觀。 |
ProjectAddedItem(<模式>=<正則表達式>) |
當符合「模式」的檔案新增至所開啟解決方案中的專案時,此條件為 true。 |
SolutionHasProjectCapability(<表達式>=ProjectCapability) |
只要解決方案具有符合所提供子運算式的功能的專案,則為 True。 運算式可以是類似 VB | CSharp的 。 如需專案功能的詳細資訊,請參閱 專案查詢 API 概觀。 |
SolutionState(<狀態>=SolutionState) |
當解決方案狀態符合提供的值時為 True,請參閱 解決方案狀態 以 取得值清單。 |
EditorContentType(<內容類型>) |
當作用中的編輯器內容類型是或繼承自特定內容類型時,結果為 True。 |
基於相容性理由,也支援下列舊版啟用限制:
| 術語 | Description |
|---|---|
ActiveProjectBuildProperty(<屬性>=<正則表達式>) |
當選取的專案具有指定的建置屬性,且屬性值符合提供的正規表示式模式時,條件為真。 |
ActiveProjectFlavor(<guid>) |
每當選取的專案具有符合指定專案類型 GUID 的類型時,就會為 True。 |
SolutionHasProjectBuildProperty(<屬性>=<正則表達式>) |
當解決方案中的專案載入指定的建置屬性,且該屬性的值符合所提供的正則運算式篩選條件時,該條件為 true。 |
SolutionHasProjectFlavor(<GUID>) |
每當解決方案具有經過調整 (匯總) 的專案,且具有符合指定專案類型 GUID 的類型設定時,都會為 True。 |
UIContext(<GUID>) |
當指定的 UI 內容 在 Visual Studio 實例中處於作用中時,為 True。 |
解決方案狀態
解決方案狀態是指解決方案及其專案的狀態、解決方案是否已載入、是否有零、一個或多個專案,以及是否正在建置。
對應於解狀態的啟動約束可以像任何其他啟動約束一樣組合。 例如,您可以結合指定FullyLoaded解決方案和SingleProject解決方案的啟用限制,以便在單一專案解決方案完全載入時擷取它們。
this.EnabledWhen = ActivationConstraint.And(
ActivationConstraint.SolutionState(SolutionState.SingleProject),
ActivationConstraint.SolutionState(SolutionState.FullyLoaded));
用戶端內容索引鍵
啟用規則也可以利用 使用者端內容 作為其運算式的一部分。
目前,用戶端內容僅限於 IDE 狀態中的 一小部分值 。