FrameworkElement.FindName(String) 方法

定義

擷取具有指定識別碼名稱的物件。

public:
 virtual Platform::Object ^ FindName(Platform::String ^ name) = FindName;
IInspectable FindName(winrt::hstring const& name);
public object FindName(string name);
function findName(name)
Public Function FindName (name As String) As Object

參數

name
String

Platform::String

winrt::hstring

要求物件的名稱。

傳回

Object

Platform::Object

IInspectable

要求的 物件。 如果在目前的 XAML 名稱範圍中找不到相符的物件,則這可以是 Null。

備註

重要

若要有效地使用 FindName 方法,您應該瞭解 XAML 名稱範圍的概念,以及如何在 XAML 載入時間建立 XAML 名稱範圍,然後在執行時間參考並可能修改。 如需詳細資訊,請參閱 XAML 名稱範圍

您Windows 執行階段程式碼中最常見的用法 FindName ,是從 XAML 頁面產生的 InitializeComponent 呼叫內。 在此情況下, FindName 只有在載入 XAML 頁面之後,才會叫用 。 InitializeComponent 提供基礎結構,讓 XAML 載入所具現化的任何物件都可以由程式碼後置程式碼方便存取。 然後,您可以將 物件參考為與標記宣告 之 x:Name 屬性共用相同名稱的變數。

例如 的 FindName 執行時間 API 正在針對應用程式的執行時間物件樹狀結構運作,因為它存在於記憶體中。 從範本或執行時間載入 XAML 建立此物件樹狀結構的一部分時,XAML 名稱範圍通常不會連續在該物件樹狀結構內。 結果是在物件 FindName 樹狀結構中可能有指定範圍找不到的具名物件。 您在一般應用程式案例中可能會遇到的 XAML 命名範圍之間不連續的情況是套用範本來建立物件,或呼叫 XamlReader.Load 建立物件時,然後新增至物件樹狀結構。

如果您針對 FindName 傳回非預期的 Null 結果,請嘗試下列技術:

  • 針對來自範本的具名物件,如果您要定義或衍生自控制項,您可以從套用範本的物件範圍呼叫 GetTemplateChild 。 您必須位於衍生類別定義範圍中,才能使用 GetTemplateChild,因為它是 Control 的受保護方法。
  • 如果您不在衍生類別定義範圍中,您可以在套用範本 (處理Loaded事件) 之後,在物件存留期的某個時間點使用VisualTreeHelper來輸入範本的視覺化樹狀結構。 VisualTreeHelper 使用父子式隱喻來逐步執行樹狀結構,而不是使用 XAML 名稱範圍概念。 逐步執行樹狀結構通常需要控制群組合的特定知識,因為它來自指定的範本。 您可以在控制項上使用 VisualTreeHelper.GetChild 來取得控制項的套用範本根目錄,並在範本根目錄上特別呼叫 FindName ,以存取範本 XAML 內具名的專案。
  • 針對 XamlReader.Load 案例,您應該保留 XamlReader.Load 呼叫之傳回值的參考,這是將成為相關之已建立之 XAML 名稱範圍擁有者或基礎的物件。 然後改為從該範圍呼叫 FindName

FindName 傳回的物件不一定是 FrameworkElement。 例如,您可以將名稱套用至動畫分鏡腳本,而各種動畫腳本類型不會衍生自 FrameworkElement

物件名稱屬性 (或類似的 x:Name 屬性) ,方法是在 XAML 標記中的物件專案上指定屬性。 您可以在載入初始來源 XAML 之後設定 Name 值,但這項技術有一些限制, (請參閱 名稱) 中的。

TextElement 會定義類似的 FindName。 這會啟用 FindName 物件模型中的行為,這不限於 FrameworkElement。 的任一實 FindName 作都可以周遊至混合 FrameworkElement / text 元素物件樹狀結構,並使用常見的 XAML 名稱範圍,讓 FrameworkElement.FindName 呼叫可以找到具名文字元素,反之亦然。

在物件樹狀目錄中的執行時間新增或變更的名稱值,將會更新為物件樹狀結構中該層級的動作 XAML 名稱範圍。 換句話說,如果您建立新的 FrameworkElement,請為其指定 Name,然後將它新增至物件樹狀結構,從該 XAML 名稱範圍內呼叫 FindName ,即可找到並傳回程序代碼建立的物件。

適用於

另請參閱