XAML - свойство "Содержимое" установлено более одного раза

Очень новый для WPF и XAML. Я не могу понять, почему я не могу разместить элемент управления WPF, где бы мне хотелось, в следующем коде. Моя проблема - это теги <canvas></canvas>. Все, что я положил в это место, дает мне "Свойство" Содержимое "установлено более одного раза

Если кто-нибудь может объяснить простым языком, где установлено свойство Content, которое было бы наиболее полезно.

Я просмотрел следующие статьи безрезультатно: свойство 'Content' установлено более одного раза содержимое ресурса установлено более одного раза Содержимое ресурса установлено более одного раза Свойство 'Content' установлено более одного раза Button WPF ControlTemplate вызывает ошибку " Свойство 'content' установлено более одного раза

<Window x:Class="PDFIndexer.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid x:Name="ParentGrid">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="1*" />
        <RowDefinition Height="25" />
    </Grid.RowDefinitions>
    <Menu Grid.Row="0" >
        <MenuItem Header="File" >
            <MenuItem Header="Open Project" Click="MenuItem_Click_1"></MenuItem>
            <MenuItem Header="Save Project"></MenuItem>
            <MenuItem Header="Close Project"></MenuItem>
            <Separator></Separator>
            <MenuItem Header="Exit"></MenuItem>
        </MenuItem>
        <MenuItem Header="Edit"></MenuItem>
    </Menu>
    <TabControl Grid.Row="1">
        <TabItem Header="Document Flow" >
            This is where the outline of the entire document will be placed.
            <Canvas></Canvas>
         </TabItem>
        <TabItem Header="Preview">
            This is where the preview will be drawn to screen.
        </TabItem>
        <TabItem Header="Resources">
            This is where the resources { graphic files, fonts, data files }
        </TabItem>
        <TabItem Header="Code Library">
            This is where the user can save re-usable bits of code. Useful when adding intel barcodes or Address blocks etc...
        </TabItem>
    </TabControl>


    <StatusBar Grid.Row="2">
        Items
    </StatusBar>
</Grid>

Ответы

Ответ 1

Добавив свое текстовое описание к вашему TabItem, вы добавили контент, а затем, когда вы добавили Canvas, вы добавили дополнительный элемент Контента, который не разрешен для TabItem. Вам нужно использовать элемент управления, который может содержать коллекцию Children, например Canvas, Grid, StackPanel и т.д. Попробуйте что-то вроде этого.

<TabControl Grid.Row="1">
    <TabItem Header="Document Flow">
        <Canvas>
            <TextBlock>
                This is where the outline of the entire document will be placed.
            </TextBlock>
        </Canvas>
    </TabItem>
    <TabItem Header="Preview">
        This is where the preview will be drawn to screen.
    </TabItem>
    <TabItem Header="Resources">
        This is where the resources { graphic files, fonts, data files }
    </TabItem>
    <TabItem Header="Code Library">
        This is where the user can save re-usable bits of code. Useful when adding intel barcodes or Address blocks etc...
    </TabItem>
</TabControl>

Ответ 2

Попробуйте обернуть содержимое TabItem в Grid и использовать TextBlock для отображения текста:

<TabItem Header="Document Flow" >
    <Grid>
        <TextBlock Text="This is where the outline of the entire document will be placed."/>
        <Canvas></Canvas>
    </Grid>
</TabItem>

Ответ 3

Некоторые контейнеры допускают только один элемент, другие контейнеры позволяют > 1 элемент. Когда вы получаете сообщение об ошибке "Содержимое" установлено более одного раза, это означает, что вы пытались поместить в контейнер более одного типа, который разрешает только один элемент.

Возможно, попробуйте это (не проверено):

<TabItem Header="Document Flow" >
<StackPanel>
<TextBlock>This is where the outline of the entire document will be placed. </TextBlock>
<Canvas></Canvas>
</StackPanel>
</TabItem>