模拟渲染器来自WinJS模拟XAML / C#

时间:2013-09-29 16:10:34

标签: c# xaml windows-8 windows-runtime winjs

在WinJS应用程序中,listview的itemTemplate属性可以接受一个函数,我可以在其中手动创建元素。

XAML / C#应用程序中此方法的模拟是什么?

我了解DataTemplate选择器,但我需要手动创建项目,因为性能,我想要删除模板。

3 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

我认为您可以从ItemsControl继承CustomControl。

   public class BuildingComparer : ItemsControl
      {} 

在那里,你会发现一些覆盖的方法:

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

您可以访问Items属性,这样您可以在SizeChanged事件发生时绘制元素,您可以调用方法,手动绘制所有元素。

希望它对你有所帮助。

答案 2 :(得分: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;
}