【问题标题】:Unknown Build Error 'key cannot be null'未知的构建错误'键不能为空'
【发布时间】:2011-09-09 08:34:48
【问题描述】:

我的列表框有一个数据模板,我必须为所有标签使用项目资源。如果我删除对资源的引用并只输入标签的文本,则没有错误。如果我尝试使用这些资源,则会出现上述错误。

这是数据模板:

<DataTemplate x:Key="CheckBoxDatePickerItemTemplate">
    <Border BorderThickness="1" CornerRadius="3" BorderBrush="{StaticResource GreenBorderBrush}">
        <StackPanel Orientation="Horizontal" Background="#208897EB" MinWidth="370">
            <CheckBox Focusable="False" IsChecked="{Binding IsChecked}" VerticalAlignment="Top"/>
            <ContentPresenter Content="{Binding Name, Mode=OneTime}" Margin="2,2" Width="140" VerticalAlignment="Top"/>
            <StackPanel Orientation="Vertical" Visibility="{Binding DateDataVisible}">
                <StackPanel Orientation="Horizontal">
                    <CheckBox IsChecked="{Binding IncludeNullDates}" VerticalAlignment="Center" Focusable="False"/>
                    <Label Content="{x:Static resx:Resources.Label_IncludeEmptyDates}" Margin="2,2" Width="170" VerticalAlignment="Center"/>
                </StackPanel>
                <StackPanel Orientation="Horizontal">
                    <ContentPresenter Content="{x:Static resx:Resources.Label_From}" Margin="2,0" Width="50" VerticalAlignment="Center"/>
                    <DatePicker SelectedDate="{Binding StartDate}" Margin="2,2" Width="150" />
                </StackPanel>
                <StackPanel Orientation="Horizontal">
                    <ContentPresenter Content="{x:Static resx:Resources.Label_To}" Margin="2,0" Width="50" VerticalAlignment="Center"/>
                    <DatePicker SelectedDate="{Binding EndDate}" Margin="2,2" Width="150" />
                </StackPanel>
            </StackPanel>
        </StackPanel>
    </Border>
</DataTemplate>

需要注意的是,我们使用其他 XAML 文件中的资源没有问题。然而,这个文件是一个资源字典并被添加到 app.xaml 资源中。这个错误是怎么回事?

【问题讨论】:

  • 只是一个随机的想法,确保首先声明所有引用的资源,即在资源字典中的DataTemplate上方。
  • 我想通了...我没有为 resx 添加 xmlns。哎呀:s

标签: xaml


【解决方案1】:

我们正在一个团队中处理这个项目,我刚刚复制了使用资源的行...我也忘了复制 xmlns 属性。我觉得奇怪的是,该错误不是真正的描述性错误,也没有提供任何关于问题所在的真正提示。

故事的寓意:如果复制代码行,请确保所有对命名空间的引用也被复制。

【讨论】:

  • 由于 Source={x:Static l:MainResource.Select}} 中设置的资源位置错误,我遇到了同样的错误。错误消息比指出错误所在的位置更具误导性:S
  • 谢谢,这为我解决了错误。考虑到资源部分中的每个项目都需要x:Key="..." 属性,此错误消息对于这种情况来说确实很糟糕。
  • 我拥有它是因为我删除了对诊断设置的引用,但仍然使用了该设置。
【解决方案2】:

旧帖子,但对于从 Google 搜索到这里的任何其他人......我遇到了同样的错误,结果对我来说却是不同的东西。

我使用完全限定语法绑定到属性,因为我的绑定中没有目标对象。但是我是用速记来做的,这显然是完全限定的语法所不允许的。我有这样的事情:

{Binding (cmn:ElementData.ID)}

我改成:

{Binding Path=(cmn:ElementData.ID)}

然后繁荣,神秘的错误消失了,一切都按预期工作。显然不使用速记非常重要...

感谢Andrew Stakhovthis 链接,他的评论提示了我。

【讨论】:

  • 谢谢你,我几年前就遇到过这个问题,但它再次难住了我……滚动到你的帖子突然激发了我大脑中的联系!啊,WPF很有趣! :-s
  • 只是打同样的事情。当心在 XAML 中进行强制转换。有龙
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-09
  • 1970-01-01
  • 2015-08-31
  • 1970-01-01
  • 1970-01-01
  • 2020-12-04
  • 1970-01-01
相关资源
最近更新 更多