2013-09-29 289 views
1

在WinJS應用列表視圖的itemTemplate屬性可以接受,其中我可以手動創建的元件的功能。模板渲染

哪些是XAML/C#應用這種方法模擬?

我知道DataTemplate中選擇,但我需要手動創建的項目,我想擺脫掉因業績模板。

+0

你想要的模板創建功能的C#中的解決方案,使您可以創建動態模板作爲winJs?我不清楚這個問題是這樣的:) ?? – Anobik

+0

@Anobik是的,但我不想在創建的控制 – Alexander

回答

0

我想你可以做一個CustomControl自ItemsControl繼承。

public class BuildingComparer : ItemsControl 
     {} 

在那裏,你會發現一些方法來覆蓋:

protected override DependencyObject GetContainerForItemOverride() 
    { 
     var container = new ContentPresenter();   
     //Do Stuff 
     return container;    
    } 

而且你必須進入項目屬性,以便可以畫畫,每當SizeChanged事件發生的元素,你可以調用一個方法手動繪製所有元素。

希望它可以幫助你。

0

在C#/ XAML做到這一點,你需要將ItemsControl中的ItemsSource屬性綁定到,爲您創建的項目的屬性。

例XAML:

<ItemsControl ItemsSource="{Binding SourceProperty}" /> 

實例的DataContext:

public IEnumerable SourceProperty 
{ 
    get 
    { 
     yield return new TextBlock(new Run("First")); 
     yield return new TextBlock(new Run("Second")); 
     yield return new TextBlock(new Run("Third")); 
    } 
} 

編輯: 如果你絕對必須避免所有數據綁定(我不知道你爲什麼會),您可將ItemsSource在代碼隱藏:

更新XAML:

<ItemsControl Name="MyItemsControl" /> 

後面的代碼:

public MainWindow() 
{ 
    InitializeComponent(); 

    MyItemsControl.ItemsSource = SourceProperty; 
} 
+0

感謝你,因爲性能的模板,但我需要一種方法來生成ListView的項目,所以我可以充分利用虛擬化項目的 – Alexander

+0

所以@Alexander使用一個ListView,而不是一個ItemsControl的?同樣的原則適用。你需要UI虛擬化還是數據虛擬化?如果您需要數據虛擬化,是否需要順序或隨機訪問?這裏沒有足夠的信息來提供良好的指導。 – Jon