应用模板时未显示XAML按钮内容

时间:2018-10-30 20:21:35

标签: wpf xaml templates button styles

我正在尝试为每个控件使用此自定义模板代码,并且网格中的第二个按钮的内容如何。这是我的代码段。

'<Grid>  
  <Grid.ColumnDefinitions>
     <ColumnDefinition Width="*"/>
     <ColumnDefinition Width="Auto"></ColumnDefinition>         
  </Grid.ColumnDefinitions>      
  <Grid.Resources>
     <!-- First Template -->
     <ControlTemplate x:Key="TBtnOpen" TargetType="{x:Type Button}">
        <Border x:Name="Border" CornerRadius="4">
           <Border.Background><!-- Default Diagonal Gradient-->
              <LinearGradientBrush>
                 <GradientStop Color="DarkGreen" Offset="0"/>
                 <GradientStop Color="LightGreen" Offset="0.5"/>
                 <GradientStop Color="DarkBlue" Offset="1"/>        
              </LinearGradientBrush>
           </Border.Background>
           <ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center" />
        </Border>
     </ControlTemplate>
     <!-- Second Template -->
     <ControlTemplate x:Key="TBtnCloseHor" TargetType="{x:Type Button}">
        <Border x:Name="Border" CornerRadius="8">
           <Border.Background>
              <LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5"> <!-- Horizontal Gradient-->
                 <GradientStop Color="Violet" Offset="0"></GradientStop>
                 <GradientStop Color="LightBlue" Offset="0.2"></GradientStop>
                 <GradientStop Color="DarkGreen" Offset="0.4"></GradientStop>
                 <GradientStop Color="Red" Offset="0.6"></GradientStop>
                 <GradientStop Color="Yellow" Offset="0.8"></GradientStop>
                 <GradientStop Color="DarkOrange" Offset="1"></GradientStop>
              </LinearGradientBrush>
           </Border.Background>
        </Border>
     </ControlTemplate>
     <!-- Controls Styles -->
     <Style x:Key="BtnStyles" TargetType="Button">
        <Setter Property="Height" Value="40"></Setter>
        <Setter Property="Width" Value="100"></Setter>
        <Setter Property="FontSize" Value="25"></Setter>
        <Setter Property="FontStyle" Value="Italic"></Setter>
        <Setter Property="FontFamily" Value="Arial"></Setter>
        <Setter Property="FontWeight" Value="Bold"></Setter>
     </Style>
  </Grid.Resources>  
  <Button  Grid.Column="0" x:Name="btnFirst"  HorizontalAlignment="Left" 
           Style="{StaticResource BtnStyles}"
           Template="{StaticResource TBtnOpen}">Open!
    <Button.Margin>10</Button.Margin>        
    <Button.Foreground>Black</Button.Foreground>        
  </Button>  
  <Button Grid.Column="1" x:Name="btnSecond" HorizontalAlignment="Right" 
          Style="{StaticResource BtnStyles}" Template="{StaticResource TBtnCloseHor}">Close!<!-- This is the missing Content-->
     <Button.Margin>10</Button.Margin>  
     <Button.Foreground>White</Button.Foreground>         
  </Button>  </Grid>'

如果将相同的模板(TBtnOpen)应用于两个按钮控件,则它可以正常工作,但每个模板都应用不同的模板,则会隐藏第二个按钮的内容。 任何建议将不胜感激。 谢谢 托尼。

PS:链接波纹管处的示例图像。 enter image description here

2 个答案:

答案 0 :(得分:0)

我不知道是什么原因引起的,但是我知道如何解决它。您应该绑定边框的内容。

在您的边界内写上

<ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center" Content="{Binding Content, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"/>

答案 1 :(得分:0)

使用自定义模板时,必须指定<ContentPresenter/>,否则WPF将无法理解内容应该去的地方。因此,尝试将其添加到自定义模板中,即使您未指定VerticalAlignmentHorizontalAlignment

,也会显示您的内容
            <ControlTemplate x:Key="TBtnCloseHor" TargetType="{x:Type Button}">
            <Border x:Name="Border" CornerRadius="8">
            <ContentPresenter/>
                <Border.Background>
                    <LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5">
                        <!-- Horizontal Gradient-->
                        <GradientStop Color="Violet" Offset="0"></GradientStop>
                        <GradientStop Color="LightBlue" Offset="0.2"></GradientStop>
                        <GradientStop Color="DarkGreen" Offset="0.4"></GradientStop>
                        <GradientStop Color="Red" Offset="0.6"></GradientStop>
                        <GradientStop Color="Yellow" Offset="0.8"></GradientStop>
                        <GradientStop Color="DarkOrange" Offset="1"></GradientStop>
                    </LinearGradientBrush>
                </Border.Background>
            </Border>
        </ControlTemplate>