2017-10-05 218 views
2

我在<Application.Resources>像这样定义为Label一个Style如何为标签设置TextBlock样式?

<Style x:Key="HeaderBar" TargetType="{x:Type Label}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type Label}"> 
        <Grid> 
         <Rectangle x:Name="TitleBox" Fill="#FFECDC54"> 
          <Rectangle.Stroke> 
           <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
            <LinearGradientBrush.RelativeTransform> 
             <TransformGroup> 
              <ScaleTransform CenterY="0.5" CenterX="0.5"/> 
              <SkewTransform CenterY="0.5" CenterX="0.5"/> 
              <RotateTransform Angle="140" CenterY="0.5" CenterX="0.5"/> 
              <TranslateTransform/> 
             </TransformGroup> 
            </LinearGradientBrush.RelativeTransform> 
            <GradientStop Color="#FFA09F9F" Offset="0.4"/> 
            <GradientStop Color="White" Offset="0.5"/> 
           </LinearGradientBrush> 
          </Rectangle.Stroke> 
         </Rectangle> 
         <ContentPresenter HorizontalAlignment="Left" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /> 
        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

我还定义了的TextBlocks样式:

<Style x:Key="TextStyleMedium" TargetType="{x:Type TextBlock}"> 
    <Setter Property="TextWrapping" Value="NoWrap"/> 
    <Setter Property="TextTrimming" Value="None"/> 
    <Setter Property="FontSize" Value="16"/> 
    <Setter Property="FontFamily" Value="Franklin Gothic Medium Cond"/> 
</Style> 

如何设置使用TextBlock的风格标签( “TextStyleMedium”)为标签中的文字?

回答

2

您可以使用框架元素这样一个共同的基本样式:

<Style x:Key="TextBase" TargetType="{x:Type FrameworkElement}"> 
     <Setter Property="TextBlock.TextWrapping" Value="NoWrap"/> 
     <Setter Property="TextBlock.TextTrimming" Value="None"/> 
     <Setter Property="TextBlock.FontSize" Value="16"/> 
     <Setter Property="TextBlock.FontFamily" Value="Franklin Gothic Medium Cond"/> 
    </Style> 

    <Style x:Key="TextStyleMedium" TargetType="{x:Type TextBlock}" BasedOn="{StaticResource TextBase}"> 
    </Style> 

    <Style x:Key="HeaderBar" TargetType="{x:Type Label}" BasedOn="{StaticResource TextBase}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type Label}"> 
        <Grid> 
         <Rectangle x:Name="TitleBox" Fill="#FFECDC54"> 
          <Rectangle.Stroke> 
           <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
            <LinearGradientBrush.RelativeTransform> 
             <TransformGroup> 
              <ScaleTransform CenterY="0.5" CenterX="0.5"/> 
              <SkewTransform CenterY="0.5" CenterX="0.5"/> 
              <RotateTransform Angle="140" CenterY="0.5" CenterX="0.5"/> 
              <TranslateTransform/> 
             </TransformGroup> 
            </LinearGradientBrush.RelativeTransform> 
            <GradientStop Color="#FFA09F9F" Offset="0.4"/> 
            <GradientStop Color="White" Offset="0.5"/> 
           </LinearGradientBrush> 
          </Rectangle.Stroke> 
         </Rectangle> 
         <ContentPresenter HorizontalAlignment="Left" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /> 
        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
0

这样做的一种方法是将它作为隐含的样式包含在您的ContentPresenter的资源中。像这样:

<Label Content="ABC"> 
    <Label.Template> 
    <ControlTemplate TargetType="{x:Type Label}"> 
     <Grid> 
     <Rectangle x:Name="TitleBox" Fill="#FFECDC54"> 
      <Rectangle.Stroke> 
      <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
       <LinearGradientBrush.RelativeTransform> 
       <TransformGroup> 
        <ScaleTransform CenterY="0.5" CenterX="0.5"/> 
        <SkewTransform CenterY="0.5" CenterX="0.5"/> 
        <RotateTransform Angle="140" CenterY="0.5" CenterX="0.5"/> 
        <TranslateTransform/> 
       </TransformGroup> 
       </LinearGradientBrush.RelativeTransform> 
       <GradientStop Color="#FFA09F9F" Offset="0.4"/> 
       <GradientStop Color="White" Offset="0.5"/> 
      </LinearGradientBrush> 
      </Rectangle.Stroke> 
     </Rectangle> 
     <ContentPresenter HorizontalAlignment="Left" RecognizesAccessKey="True" 
          SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"> 
      <ContentPresenter.Resources> 
       <Style TargetType="{x:Type TextBlock}"> 
       <Setter Property="TextWrapping" Value="NoWrap"/> 
       <Setter Property="TextTrimming" Value="None"/> 
       <Setter Property="FontSize" Value="32"/> 
       <Setter Property="FontFamily" Value="Franklin Gothic Medium Cond"/> 
       </Style> 
      </ContentPresenter.Resources> 
     </ContentPresenter> 
     </Grid> 
    </ControlTemplate> 
    </Label.Template> 
</Label> 

这会将您的样式应用于生成的TextBlock元素。

+0

现在尝试它,但仍然获得默认字体,而不是样式中的一个。 – qnyz

+0

@qnyz:编辑我的代码。看看这个是否有效。 – dotNET

+0

不,还是不行。 – qnyz

1

如何设置Label使用TextBlock风格(“TextStyleMedium”)在Label的文本?

设置LabelTextBlockContent要应用你的风格:

<Label Style="{StaticResource HeaderBar}"> 
    <Label.Content> 
     <TextBlock Text="text..." Style="{StaticResource TextStyleMedium}" /> 
    </Label.Content> 
</Label> 

一个Label没有且不会产生TextBlock默认。这是一个ContentControl,它有一个Content属性,您可以将其设置为任何您想要的值,包括string或样式TextBlock

相关问题