Share via


x:Arguments 指示詞

封裝 XAML 中非無參數建構函式物件專案宣告或 Factory 方法物件宣告的建構引數。

XAML 元素使用方式 (非參數建構函式)

<object ...>
  <x:Arguments>
    oneOrMoreObjectElements
  </x:Arguments>
</object>

XAML 元素使用方式 (Factory 方法)

<object x:FactoryMethod="methodName"...>
  <x:Arguments>
    oneOrMoreObjectElements
  </x:Arguments>
</object>

XAML 值

Description
oneOrMoreObjectElements 一或多個物件專案,指定要傳遞至備份非無參數建構函式或 Factory 方法的引數。

一般用法是在物件專案內使用初始化文字來指定實際引數值。 請參閱範例一節。

元素的順序相當重要。 依序排列的 XAML 類型必須符合備份建構函式或 Factory 方法多載的類型和類型順序。
methodName 處理任何 x:Arguments 引數的 Factory 方法名稱。

相依性

x:FactoryMethod 可以修改套 x:Arguments 用的範圍和行為。

x:FactoryMethod如果未指定 , x:Arguments 則適用于備份建構函式的替代(非預設)簽章。

如果 x:FactoryMethod 已指定, x:Arguments 則適用于具名方法的多載。

備註

XAML 2006 可透過初始化文字支援非預設初始化。 然而,初始化文字建構技術的實際應用有限。 初始化文字會視為單一文字字串;因此,它只會新增單一參數初始化的功能,除非已針對可剖析字串中自訂資訊專案和自訂分隔符號的建構行為定義類型轉換器。 此外,物件邏輯的文字字串可能是給定的 XAML 剖析器原生預設類型轉換器,用於處理真實字串以外的基本類型。

x:ArgumentsXAML 用法不是一般意義上的屬性專案使用方式,因為 指示詞標記不會參考包含的物件元素類型。 這更類似于其他指示詞,例如 x:Code 專案將標記標示為範圍,其中標記應該解譯為子內容預設值以外的範圍。 在此情況下,每個物件專案的 XAML 類型都會傳達引數類型的相關資訊,XAML 剖析器會使用此類型來判斷使用方式嘗試參考的特定建構函式處理站方法簽章 x:Arguments

x:Arguments 要建構的物件專案必須位於物件專案的任何其他屬性專案、內容、內部文字或初始化字串之前。 中的 x:Arguments 物件元素可以包含屬性和初始化字串,如該 XAML 類型及其備份建構函式或 Factory 方法所允許。 針對 物件或引數,您可以藉由參考已建立的前置詞對應,指定在預設 XAML 命名空間外部的自訂 XAML 類型或 XAML 類型。

XAML 處理器會使用下列指導方針來判斷 中 x:Arguments 指定引數如何用來建構 物件。 如果 x:FactoryMethod 已指定,則會將資訊與指定的 x:FactoryMethod 進行比較(請注意, 的值 x:FactoryMethod 是方法名稱,而具名方法可以有多載。 如果未 x:FactoryMethod 指定,則會將資訊與 物件的所有公用建構函式多載集合進行比較。 XAML 處理邏輯接著會比較參數數目,並選取具有相符 arity 的多載。 如果有一個以上的相符專案,XAML 處理器應該根據所提供物件元素的 XAML 類型來比較參數的類型。 如果仍有一個以上的相符專案,則未定義 XAML 處理器行為。 x:FactoryMethod如果已指定 ,但無法解析 方法,XAML 處理器應該擲回例外狀況。

XAML 屬性使用 <x:Arguments>string</x:Arguments> 技術上是可行的。 不過,除了透過初始化文字和類型轉換子可以執行的功能之外,這不會提供任何功能,而且使用此語法並不是 XAML 2009 Factory 方法功能的設計意圖。

範例

下列範例顯示非無參數建構函式簽章,然後是存取該簽章的 x:Arguments XAML 用法。

public class Food {
  private string _name;
  private Int32 _calories;
  public Food(string name, Int32 calories) {
      _name=name;
      _calories=calories;
  }
}
<my:Food>
  <x:Arguments>
      <x:String>Apple</x:String>
      <x:Int32>150</x:Int32>
  </x:Arguments>
</my:Food>

下列範例顯示目標 Factory 方法簽章,然後是存取該簽章的 x:Arguments XAML 用法。

public Food TryLookupFood(string name)
{
switch (name) {
  case "Apple": return new Food("Apple",150);
  case "Chocolate": return new Food("Chocolate",200);
  case "Cheese": return new Food("Cheese", 450);
  default: {return new Food(name,0);
}
}
<my:Food x:FactoryMethod="TryLookupFood">
  <x:Arguments>
      <x:String>Apple</x:String>
  </x:Arguments>
</my:Food>

另請參閱