2016-11-18 39 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显示自定义控件。

<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所需的零件,以便其正确呈现。

编辑:

试试这个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

为快速回答而欢呼。我尝试了你提到的内容,但即使使用最基本的测试和没有Parts的默认样式,ContentPresenter也不会显示任何内容。 – JTK

相关问题