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>

ボタンは、青と黄色の長方形の間に表示されます。

私は何が間違っているのですか?

4

2 に答える 2

3

問題は、ContentControlのコンテンツを2回定義していることです。1回はContentControlで、もう1回はでWindow.xamlです。のコンテンツはWindow.xamlContentControlのコンテンツを上書きするため、上下に色付きの長方形のないボタンが表示されます。

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 に答える