2011-03-02 25 views
3

在代碼中,一個ControlTemplate包含一個層次結構FrameworkElementFactory,可用於構建框架元素本身。但是,在XAML中,ControlTemplate的內容顯示爲元素本身。如何在XAML中實例化ControlTemplate?

XAML解析器是否從一個對象形式轉換爲另一個對象形式,是否使用ValueConverter,還是它在解析ControlTemplate內容時實際創建工廠?

回答

3

實際上,如果它是在XAML中定義的而不是在代碼中定義的,那麼實際上的做法會有所不同。爲了驗證,您可以使用單個窗口在WPF中創建一個簡單項目,並添加一個自定義Control,該控件具有在XAML中定義的ControlTemplate,默認Style。然後將控件添加到窗口並添加一個Button,其Click處理程序包含一個斷點。

當斷點被擊中時,我們可以檢查自定義控件,它是ControlTemplate。 VisualTree屬性(即FrameworkElementFactory)爲null。

使用Reflector,我們可以在StyleHelper.ApplyTemplateContent方法中看到相關的代碼。該方法中的第一個if語句應用FrameworkElementFactory(從VisualTreeProperty傳入)。第二個if語句從XAML加載ControlTemplate,最終執行FrameworkTEmplate.LoadOptimizedTemplateContent。

+0

很好的解釋。謝謝。 – mancaus 2011-03-04 18:59:39

相關問題