0
<ContentControl x:Class="Test.MyControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             Width="200" Height="200" >
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <Rectangle Fill="Blue"/>
        <ContentPresenter Grid.Row="1" Content="{TemplateBinding ContentControl.Content}" />
        <Rectangle Fill="Yellow" Grid.Row="2"/>
    </Grid>
</ContentControl>

<Window x:Class="Test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:Test="clr-namespace:Test" Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Test:MyControl2>
            <Button/>
        </Test:MyControl2>
    </Grid>
</Window>

Button 应该出现在蓝色和黄色矩形之间。

我究竟做错了什么?

4

2 回答 2

3

问题是您定义 ContentControl 的内容两次:一次在 ContentControl 中,一次在Window.xaml. 中的内容Window.xaml会覆盖 ContentControl 中的内容,因此您会看到一个按钮,其上方和下方没有彩色矩形。

如果要更改 ContentControl 中内容的呈现方式,则需要将相关标记放在 ContentControl 中ContentTemplate。您在上面展示的 ContentControl 需要如下所示:

<ContentControl x:Class="Test.MyControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         Width="200" Height="200" >
    <ContentControl.ContentTemplate>
        <DataTemplate>
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="*" />
                    <RowDefinition Height="*" />
                    <RowDefinition Height="*" />
                </Grid.RowDefinitions>
                <Rectangle Fill="Blue"/>
                <ContentPresenter Grid.Row="1" Content="{TemplateBinding ContentControl.Content}" />
                <Rectangle Fill="Yellow" Grid.Row="2"/>
            </Grid>
        </DataTemplate>
    </ContentControl.ContentTemplate>
</ContentControl>
于 2012-04-22T17:23:09.780 回答
-1

我不是专业人士,但我会更改以下内容:

    <Rectangle Fill="Blue"/>
    <ContentPresenter Grid.Row="1" Content="{TemplateBinding ContentControl.Content}" />
    <Rectangle Fill="Yellow" Grid.Row="2"/>

对此:

    <Rectangle Fill="Blue" Grid.Row="0"/>
    <ContentPresenter Grid.Row="1" Content="{TemplateBinding ContentControl.Content}" />
    <Rectangle Fill="Yellow" Grid.Row="2"/>

简短:您忘记为第一个定义行。

于 2012-04-22T15:38:07.323 回答