gpt4 book ai didi

c# - 未找到来自窗口资源的 ItemTemplate

转载 作者:行者123 更新时间:2023-11-30 12:42:05 25 4
gpt4 key购买 nike

我有一个显示 2 个列表的窗口,它们应该使用相同的模板,所以我考虑将模板放入我的窗口中的资源中,如下所示:

<Grid>
<Grid.Resources>
<DataTemplate DataType="itemTemplateAsResourceTest:FeatureViewModel" x:Key="FeatureTemplate">
<TextBlock Margin="5" Text="{Binding Name}"/>
</DataTemplate>
</Grid.Resources>

<ListBox ItemTemplate="{StaticResource FeatureTemplate}" ItemsSource="{Binding Features}"/>
</Grid>

Features 只是 FeatureViewModel 的列表(我把它放在测试应用程序的主窗口中)并且 FeatureViewModel 在我的测试中看起来像这样:

public class FeatureViewModel
{
public string Name
{
get { return "Name"; }
}
}

它在 Designer 中工作,但是当我启动我的应用程序时它说“未找到资源‘FeatureTemplate’。这不可能是拼写错误,因为 Designer 找到了它!我做错了什么?

当我将模板直接放入 ListBox 时,它可以工作,但后来我复制了我的模板:

<Grid>
<ListBox ItemsSource="{Binding Features}">
<ListBox.ItemTemplate>
<DataTemplate DataType="itemTemplateAsResourceTest:FeatureViewModel">
<TextBlock Margin="5" Text="{Binding Name}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>

重命名模板或将其直接移动到窗口的资源并没有解决问题,有人看到我的错误吗?

解决方案

改变

<DataTemplate DataType="itemTemplateAsResourceTest:FeatureViewModel" x:Key="FeatureTemplate">

<DataTemplate DataType="{x:Type itemTemplateAsResourceTest:FeatureViewModel}" x:Key="FeatureTemplate">

成功了!

最佳答案

删除DataType。这是多余的,因为您已经设置了 x:Key

除此之外,它也写错了,因为(与 Style.TargetType 相对)您必须使用 {x:Type ...} 标记扩展。否则,DataType 属性(类型为 object)仅设置为您在 XAML 中应用的字符串,而不是您打算设置的 Type

关于c# - 未找到来自窗口资源的 ItemTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35085481/

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