【问题标题】:Content is set more than once内容设置不止一次
【发布时间】:2014-09-18 18:01:40
【问题描述】:

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

错误 2 属性“内容”设置了多次。

错误1“内容”属性只能设置一次

现在,首先。我求助于谷歌以获取错误消息并获得了链接到 StackOverflow 的最佳结果。

XAML - The property 'Content' is set more than once

the property 'Content' is set more than once

Property content is set more than once

包括一个 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>

【问题讨论】:

  • 您需要发布代码才能获得答案。
  • 听起来你在多个地方设置它。也许在 xaml 中进行数据绑定,并且还尝试在代码中设置它。但是没有代码...谁知道呢?
  • 您是否费心阅读您发布的链接? MSDN 帖子接受的答案的第一句话告诉您 exactly[sic] 这个错误的原因”:...(Control X).. . 是一个 ContentControl,意味着它里面只能有一个子元素
  • 您链接到的答案中有 3/4 明确说明了潜在问题。您将.Content 属性设置为多个objects,而.Content 属性只能设置为单个object
  • 您需要指定一个面板来包含文本块...将它们包裹在 或任何其他面板中。 Window 需要有一个根元素。

标签: c# wpf xaml


【解决方案1】:

一个窗口只能包含 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>

【讨论】:

  • 虽然这确实解决了我的孤立问题。对于为什么会遇到此错误,这不是深入分析
  • “一个窗口只能包含1个元素”的哪一部分不清楚。
  • Window 控件有一个 Content 属性,MSDN 提到内容是 Text 或 Object msdn.microsoft.com/en-us/library/… 。因此,您放置了一个像 Grid、StackPanel 之类的容器……这些控件没有内容,它们有子项。之后,每个容器都有自己的方式来呈现其他对象,如列、行或并排。
  • 在 Control with content 和 COntrol with container 之间做区别,让你做类似 [tag:Jaime Still] 例子中的按钮的事情(按钮有内容,所以通过放置一个容器控件你可以放更多一个元素)。
【解决方案2】:

如果您在任何具有 Content 依赖属性的 UIElement 内设置多个元素,您将收到此错误。您需要在面板内包装多个元素,以便 Content 属性只有一个子元素。比如……

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

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

Button 和 Border 元素之间的区域是指定的简写:

<Button>
    <Button.Content>
        <!-- Content goes here -->
    </Button.Content>
</Button>

【讨论】:

  • 很高兴知道。尝试将Grid 包装在Canvas 中,出于参数考虑:&lt;Canvas&gt;&lt;Button&gt;&lt;Grid&gt; 在与您展示的示例类似的示例中,以获得 两个 网格。耶!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多