2012-04-22 1 views
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> 

Кнопка должна появляться между синими и желтыми прямоугольниками.Почему моя кнопка не отображается в области ContentPresenter?

Что я делаю неправильно?

+0

Я не думаю, что вы можете поставить кнопку внутри пользовательского элемента управления таким образом, почему бы вам не поставить кнопку внутри элемента управления? – Habib

ответ

3

Проблема заключается в том, что вы дважды определяете содержимое ContentControl: один раз в своем ContentControl и один раз в Window.xaml. Содержимое в Window.xaml переопределяет это в вашем ContentControl и, следовательно, вы видите кнопку без цветных прямоугольников сверху и снизу.

Если вы хотите изменить способ отображения содержимого в ContentControl, вам необходимо разместить соответствующую разметку в ContentControl. 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> 
-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"/> 

Short: Вы забыли определить строку для первого.

+0

Строка и столбец по умолчанию - 0 (первый) –