2009-12-14 149 views
5

我試圖以編程的事件和元素添加到一個DataTemplate在Silverlight 3.0的應用程序。我有一個帶有依賴項屬性的用戶控件,我想在其中設置模板,調整它,然後將修改後的版本設置爲內部控件。如何以編程方式修改DataTemplate?

我的想法是採取進來的DataTemplate,讀取其XAML,調整它,然後使用XamlReader創建一個修改後的DataTemplate,然後可以設置爲內部控制。這種方法的問題是我不知道如何從originalal模板獲得XAML例如(如果它甚至有可能):

protected virtual void OnItemTemplateChanged(DependencyPropertyChangedEventArgs e) 
{ 
    // Get the original Xaml from the set template 
    //string originalXaml = ??? 

    // Modify the template 
    string newXaml = originalXaml.Replace("foo", "bar"); // for example 

    // Create a new template from the modified XAML 
    DataTemplate newTemplate = (DataTemplate)XamlReader.Load(newXaml); 

    // Update the inner template 
    this._childDropdown.ItemTemplate = newTemplate; 
} 

是否有人知道或者:1)如果有一種方式來閱讀原始的XAML,或2)以編程方式修改DataTemplate的另一種方法。

感謝,

回答

1

你不能操縱通過代碼模板(見文檔FrameworkTemplate)。你會得到最接近的是調用的DataTemplate的LoadContent創建包含的XAML中的實例,但你不能用它來操縱內容,沒有辦法中的Silverlight爲UIElement再轉換回爲XAML。

我認爲你可以得到的最接近的是讓你的依賴對象中的URI指向包含初始的DataTemplate在XAML資源。

然後,您可以將此資源加載到XDocument並將其作爲XML進行處理。隨後,您可以使用XamlReader以實例的DataTemplate並將其分配給ItemTemplate

+0

我(勉強)返工我的項目,所以它不需要DataTemplate中的操作。這不是我想要的,但至少我不會浪費任何時間來嘗試這樣做。謝謝,我希望未來的Silverlight版本允許對DataTemplate進行一些編程操作。 – 2009-12-15 16:56:30

+0

我想我希望看到能夠用自定義生成器替換ItemsControl ItemContainerGenerator,而我們現在不能使用它,所以我將不得不查看SL4,看看它是否允許。 – AnthonyWJones 2009-12-15 17:46:33

相關問題