2017-06-27 33 views
1

在讀入XamlWriter和XamlReader之後,我想知道是否可以在運行時加載任意.xaml文件,編輯對象樹並重新使用它。在運行時加載.xaml文件和編輯對象樹

我想創建的是一種展示應用程序的所有可用樣式的項目。我有幾個ControlType(比如ButtonTemplateView.xaml,ListboxTemplateView.xaml ...)的TemplateViews,它們的Style屬性綁定到視圖模型,在運行時爲每個配件樣式動態構造,然後添加到主視圖。 但我也想顯示項目的CustomControls的所有樣式,現在我正在通過Activator.CreatInstance和樣式的TargetType,然後將該對象添加到主視圖。現在

,可以說如果CustomControl MyCustomTextBox是基於一個文本框,我就可以加載TextBoxTemplateView.xaml,每< 文本框 ... />切換到< MyCustomTextBox .../>然後將其添加到我的主視圖?
如果是這樣,怎麼樣?我可以把它變成一個字符串,只是替換這些字,然後把它變回可用的東西?或者當我使用XamlReader.Load時,我必須編輯UserControl對象嗎?或者是其他東西?

我希望這不是一個重複的問題(至少我沒有找到像這樣的東西),並感謝提前的任何幫助。

+0

你爲什麼不簡單地嘗試它? – Clemens

+0

如果我知道如何,我會......你爲什麼認爲我來到這裏? –

+1

「將每個切換到」聽起來像加載XAML之前的簡單字符串替換。你有沒有嘗試過任何東西? – Clemens

回答

1

您可以將<TextBox>的所有出現內容替換爲string中的<local:MyCustomTextBox>,並將其傳遞給XamlReader.Load方法。這可能是最簡單的方法,因爲XamlReader將爲您創建MyCustomTextBox元素。

另一種選擇是迭代UserControl中的<TextBox>元素,該元素從XamlReader.Load方法返回並將其替換爲MyCustomTextBox元素。如何執行此操作取決於控件在UserControl的元素樹中的位置。

+0

非常感謝!我嘗試了第一種方法,問題是,如何將.xaml文件轉換爲字符串?我試圖用'GetManifestResourceStream'來完成它,但是我必須將文件標記爲嵌入式資源,這使得它無法使用。有沒有辦法從我的文件中得到一個字符串,並仍然在項目中使用它? –

+0

該文件的構建操作是什麼? – mm8

+0

Page,它是一個UserControl。 –