gpt4 book ai didi

c# - 数组或 IEnumerable 的 DataTemplate

转载 作者:行者123 更新时间:2023-12-04 02:19:28 25 4
gpt4 key购买 nike

我想创建一个适用于我的类的数组或 IEnumerable 的隐式 DataTemplate。这样我就有了一个模板,它描述了如何呈现一堆项目而不是一个。我想这样做,以便我可以在工具提示中显示结果。例如

<TextBlock Text="{Binding Path=CustomerName}" ToolTip="{Binding Path=Invoices}">

工具提示应该会看到 Invoices 是一堆项目并使用适当的数据模板。该模板看起来像这样:

<DataTemplate DataType="{x:Type Customer[]}">
<ListBox "ItemsSource={Binding}">
etc

那没有用,所以我尝试了这篇文章中的示例 x:Type and arrays--how?其中涉及创建自定义标记扩展。如果您指定 key 而不是隐式模板,则此方法有效

然后我尝试制作自己的继承自 TypeExtension 的自定义标记扩展,如下所示,但我收到一条错误消息“字典的键不能是‘System.Windows.Controls.StackPanel’类型。只有字符串、TypeExtension、和 StaticExtension 受支持。”这是一个非常奇怪的错误,因为它将数据模板的内容作为 key ?如果我指定一个 key ,那么它可以正常工作,但这在很大程度上违背了目的。

[MarkupExtensionReturnType(typeof(Type)), TypeForwardedFrom("PresentationFramework, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35")]
public class ArrayTypeExtension
: TypeExtension
{
public ArrayTypeExtension() : base() { }

public ArrayTypeExtension(Type type) : base(type)
{
}

public ArrayTypeExtension(string value) : base(value)
{
}

public override object ProvideValue(IServiceProvider serviceProvider)
{
Type val = base.ProvideValue(serviceProvider) as Type;
return val == null ? null : val.MakeArrayType();
}
}

最佳答案

正如您链接到 {x:Type ns:TypeName[]} 的问题中所述有效。它可能会搞砸设计师,但在运行时应该没问题。

为避免设计器错误,可以将模板移至 App.xaml 或资源字典(或者当然根本不使用设计器)。

(在模板中提到控件的错误听起来像是代码生成器或编译器中的错误,遗憾的是,我怀疑您对此无能为力。)

关于c# - 数组或 IEnumerable 的 DataTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9424279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com