2016-11-18 9 views
0

У меня есть пользовательский контроль, NumericUpDown. Я создал именованный стиль, в котором я хочу расширить элемент управления, в этом случае, обернув его в грид и добавив метку.ContentPresenter не отображает пользовательский контроль в стиле

Когда я использую кнопку в качестве основного примера, я могу просто расширить ее на ControlTemplate. Оригинальная кнопка отображается в расположении ContentPresenter, и я могу добавить к ней другие элементы управления для компоновки и т. Д.

ControlTemplate TargetType="{x:Type Button}"> 
    <Border BorderThickness="3" BorderBrush="Red" Background="{TemplateBinding Background}"> 
     <ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center"/> 
    </Border> 
</ControlTemplate> 

Однако при использовании моего пользовательского элемента управления, то ContentPresenter не показывает контроль NumericUpDown, он не показывает абсолютно ничего. Даже в самой базовой форме я не могу заставить ContentPresenter показать Custom Control.

<Style x:Key="LabeledNumericUpDown2" TargetType="{x:Type controls:NumericUpDown}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type controls:NumericUpDown}"> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="5*"/> 
         <ColumnDefinition Width="5*"/> 
        </Grid.ColumnDefinitions> 

        <Label Grid.Column="0" Content="Blabla"/> 
        <ContentPresenter Grid.Column="1"/> 
        <!--<controls:NumericUpDown Grid.Column="1"/>--> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Я не могу для жизни меня выяснить, что мне не хватает.

Спасибо за вашу помощь, это очень ценится!

Редактировать

NumericUpDown пользовательский элемент управления имеет стиль по умолчанию, который определяет элемент управления NumericUpDown. Я хочу распространить это на названный стиль.

<Style TargetType="{x:Type controls:NumericUpDown}"> 
    <Setter Property="HorizontalAlignment" Value="Stretch"/> 
    <Setter Property="VerticalAlignment" Value="Top" /> 
    <Setter Property="Margin" Value="0" /> 
    <Setter Property="Height" Value="18" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type controls:NumericUpDown}"> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="*" /> 
         <ColumnDefinition Width="16" /> 
        </Grid.ColumnDefinitions> 

        <TextBox x:Name="PART_TextBox" Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Top" Padding="0" Margin="0" 
         Text="{Binding DisplayValue, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}" /> 

        <Border Grid.Column="1" BorderThickness="0 1 1 1" BorderBrush="#FFABADB3"> 
         <Grid> 
          <Grid.RowDefinitions> 
           <RowDefinition Height="8" /> 
           <RowDefinition Height="8" /> 
          </Grid.RowDefinitions> 

          <Button x:Name="PART_ButtonUp" Grid.Row="0" Content="▲" FontSize="4" HorizontalContentAlignment="Left" VerticalContentAlignment="Top" BorderThickness="0" Padding="6 1 0 0" /> 
          <Button x:Name="PART_ButtonDown" Grid.Row="1" Content="▼" FontSize="4" HorizontalContentAlignment="Left" VerticalContentAlignment="Top" BorderThickness="0" Padding="6 1 0 0" /> 

         </Grid> 
        </Border> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

ответ

0

Некоторых Controls определяют и ожидают конкретные названные элементы функционировать правильно, иначе известные как части.

Убедитесь, что ваш ControlTemplate предоставил необходимые детали для Control, чтобы обеспечить его правильное изображение.

Edit:

Попробуйте ControlTemplate, чтобы вы начали.

<ControlTemplate TargetType="{x:Type controls:NumericUpDown}"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="5*"/> 
      <ColumnDefinition Width="5*"/> 
     </Grid.ColumnDefinitions> 

     <Label Grid.Column="0" Content="Blabla"/> 

     <Grid Grid.Column="1"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="*" /> 
       <ColumnDefinition Width="16" /> 
      </Grid.ColumnDefinitions> 

      <TextBox x:Name="PART_TextBox" Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Top" Padding="0" Margin="0" 
       Text="{Binding DisplayValue, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}" /> 

      <Border Grid.Column="1" BorderThickness="0 1 1 1" BorderBrush="#FFABADB3"> 
       <Grid> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="8" /> 
         <RowDefinition Height="8" /> 
        </Grid.RowDefinitions> 

        <Button x:Name="PART_ButtonUp" Grid.Row="0" Content="▲" FontSize="4" HorizontalContentAlignment="Left" VerticalContentAlignment="Top" BorderThickness="0" Padding="6 1 0 0" /> 
        <Button x:Name="PART_ButtonDown" Grid.Row="1" Content="▼" FontSize="4" HorizontalContentAlignment="Left" VerticalContentAlignment="Top" BorderThickness="0" Padding="6 1 0 0" /> 

       </Grid> 
      </Border> 
     </Grid> 
    </Grid> 
</ControlTemplate> 
+0

Извините, вопрос непонятен. Пользовательский элемент управления также имеет стиль по умолчанию. Я добавлю это к вопросу. – JTK

+0

Обновлен мой ответ. – toadflakz

+0

Приветствия за быстрый ответ. Я попробовал то, что вы упомянули, но даже с самым базовым тестом и стилем по умолчанию без частей, ContentPresenter ничего не отображает. – JTK