2017-10-05 114 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

相關問題