共用方式為


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 值

價值 描述
oneOrMoreObjectElements 一或多個物件專案,指定要傳遞至備份非無參數建構函式或 Factory 方法的自變數。

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

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

依賴

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

如果未指定 x:FactoryMethodx:Arguments 會套用至備份建構函式的替代(非預設)簽章。

如果指定 x:FactoryMethodx:Arguments 會套用至具名方法的多載。

言論

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

x:Arguments XAML 使用方式不是一般意義上的屬性專案使用方式,因為指示詞標記不會參考包含物件元素的類型。 它更類似於其他指示詞,例如 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 處理器應該擲回例外狀況。

在技術上可以 <x:Arguments>string</x:Arguments> 使用 XAML 屬性。 不過,除了透過初始化文字和類型轉換子可以執行的功能之外,這不會提供任何功能,而且使用此語法並不是 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>

另請參閱