来自 XAML/C# 中的 WinJS 模拟的模板呈现器

本文关键字:模拟 XAML 中的 WinJS 来自 | 更新日期: 2023-09-27 18:33:17

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

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

我知道数据模板选择器,但我需要手动创建项目,由于性能原因,我想摆脱模板。

来自 XAML/C# 中的 WinJS 模拟的模板呈现器

你见过DataTemplateSelector吗? http://code.msdn.microsoft.com/windowsapps/The-DataTemplateSelector-93e46ad7

我认为你可以从 ItemsControl 继承一个自定义控件。

   public class BuildingComparer : ItemsControl
      {} 

在那里,您将找到一些覆盖方法:

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

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

希望对您有所帮助。

若要在 C#/XAML 中完成此操作,需要将 ItemsControl 的 ItemsSource 属性绑定到为您创建项的属性。

示例 XAML:

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

示例数据上下文:

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;
}