以規則為基礎的啟用條件約束
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
類型上的處理站方法。
詞彙 | 描述 |
---|---|
ClientContext (<索引鍵>=ClientContextKey ,<模式>=<regex>) |
如果提供的用戶端內容索引鍵符合規則運算式,則為 True。 請參閱用戶端內容索引鍵。 |
ActiveProjectCapability (<運算式>=ProjectCapability ) |
如果方案具有與所提供的子運算式相符之功能的專案,則為 True。 運算式可以是類似 VB | CSharp 的內容。 如需專案功能的詳細資訊,請參閱專案查詢 API 概觀。 |
ProjectAddedItem (<模式>=<regex>) |
當符合 [模式] 的檔案新增至開啟之方案中的專案時,這個詞彙為 true。 |
SolutionHasProjectCapability (<運算式>=ProjectCapability ) |
如果方案具有與所提供的子運算式相符之功能的專案,則為 True。 運算式可以是類似 VB | CSharp 的內容。 如需專案功能的詳細資訊,請參閱專案查詢 API 概觀。 |
SolutionState (<狀態>=SolutionState ) |
當方案狀態符合提供的值時為 True,值的清單請參閱方案狀態。 |
EditorContentType (<contentType>) |
當作用中編輯器內容類型是或繼承自特定內容類型時,為 True。 |
基於相容性考量,也支援下列舊版啟用條件約束:
詞彙 | 描述 |
---|---|
ActiveProjectBuildProperty (<屬性>=<regex>) |
當選取的專案具有指定的組建屬性,且屬性值符合提供的 regex 模式時,詞彙為 true。 |
ActiveProjectFlavor (<guid>) |
如果選取的專案具有符合指定專案類型 GUID 的類別,則為 True。 |
SolutionHasProjectBuildProperty (<屬性>=<regex>) |
當方案具有具有所指定組建屬性和屬性值符合所提供 regex 篩選條件的已載入專案時,詞彙為 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 狀態中的一 組小型值。