内容被设置了多次

4
在使用Visual Studio 2013中的WPF时,我遇到了一个错误:

错误2:属性“Content”设置多次。

错误1:属性“Content”只能设置一次。

首先,我通过谷歌搜索错误信息,并得到了指向StackOverflow的热门结果。

XAML - 属性'Content'被设置多次

属性'Content'被设置多次

属性content被设置多次

还包括一个MSDN帖子:

http://social.msdn.microsoft.com/Forums/vstudio/en-US/686be076-954f-4373-a2e6-fc42a6a27718/error-the-property-content-is-set-more-than-once?forum=wpf

虽然展示了一系列基于原始海报代码的定制解决方案,但我还没有遇到详细说明此错误原因的实际基本解决方案(XAML新手)。虽然这可能是多个已报告问题的重复。我个人更愿意避免发布有问题的代码以获得定制解决方案。我宁愿在这里询问社区,为什么一个初学者XAMP/WPF开发人员可能会遇到这个应用程序以及解决方案,而不是最佳实践。更多来自WPF/XAMP开发人员的建议,如何轻松地识别解决方案,并在将来继续进行调试步骤。


举个例子:

<Window x:Class="WPFT.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="197.198" Width="427.95">
    <TextBlock>Hello</TextBlock>
    <TextBlock>World</TextBlock>
</Window>

6
请发布您的代码以获得答案。 - Rohit Vats
听起来你在多个地方设置了它。也许在XAML中进行数据绑定,同时又试图在代码中设置它。但是没有代码...谁知道呢? - jfin3204
你有没有仔细阅读你发布的链接?MSDN帖子的被接受答案的第一句话就告诉你这个错误的原因:“...(Control X)...是一个ContentControl,意味着它只能有一个子元素。” - Michael
为了论证,我将提供XAML作为参考,但我不寻求定制解决方案。 - Daryl Gill
1
你链接的答案中有3/4都明确说明了潜在问题。你正在将.Content属性设置为多个object,而.Content属性只能设置为单个object - Michael
1
你需要指定一个面板来容纳TextBlocks...将它们包裹在<Grid>或<StackPanel>或其他任何面板中。你需要为窗口设置一个单一的根元素。 - Jaime Still
2个回答

10

一个窗口只能包含1个元素。

在你的代码中

<Window x:Class="WPFT.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="197.198" Width="427.95">
    <TextBlock>Hello</TextBlock>
    <TextBlock>World</TextBlock>
</Window>

你的窗口有2个文本块,你应该尝试像这样做:

<Window x:Class="WPFT.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="197.198" Width="427.95">
    <Grid>
        <TextBlock>Hello</TextBlock>
        <TextBlock>World</TextBlock>
    </Grid>
</Window>

虽然这解决了我这边单独的问题。但这并不是对为什么会遇到这个错误进行深入分析。 - Daryl Gill
“一个窗口只能包含1个元素”这句话哪里不清楚? - paparazzo
窗口控件有一个Content属性,MSDN提到内容可以是文本或对象http://msdn.microsoft.com/en-us/library/system.windows.controls.contentcontrol.content(v=vs.110).aspx。因此,您可以放置一个容器,如Grid、StackPanel等。这些控件没有内容,它们有子元素。之后,每个容器都有自己的方式来呈现其他对象,例如列、行或并排。 - Northik
区分控件和容器控件可以让你像 [tag: Jaime Still] 示例中的按钮那样做一些事情(按钮有内容,因此通过放置容器控件,您可以放置多个元素)。 - Northik

6

如果您在UIElement的Content依赖属性中设置了多个元素,则会出现此错误。您需要将多个元素包装在面板内,以便Content属性只有一个子元素。例如...

<Button>
    <StackPanel Orientation="Horizontal">
        <Image />
        <TextBlock />
    </StackPanel>
</Button>

<Border>
    <StackPanel>
        <TextBlock />
        <Image />
        <DatePicker />
    </StackPanel>
</Border>

很好知道。为了论证,尝试将Grid包装在Canvas中: <Canvas><Button><Grid>,类似于您展示的示例,以获得_两个_网格。耶! - Laurie Stearn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接