如何为标签设置TextBlock样式?
问题描述:
我在<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”)为标签中的文字?
答
您可以使用框架元素这样一个共同的基本样式:
<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>
答
这样做的一种方法是将它作为隐含的样式包含在您的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
元素。
答
如何设置
Label
使用TextBlock
风格(“TextStyleMedium”)在Label
的文本?
设置Label
到TextBlock
的Content
要应用你的风格:
<Label Style="{StaticResource HeaderBar}">
<Label.Content>
<TextBlock Text="text..." Style="{StaticResource TextStyleMedium}" />
</Label.Content>
</Label>
一个Label
没有且不会产生TextBlock
默认。这是一个ContentControl
,它有一个Content
属性,您可以将其设置为任何您想要的值,包括string
或样式TextBlock
。
现在尝试它,但仍然获得默认字体,而不是样式中的一个。 – qnyz
@qnyz:编辑我的代码。看看这个是否有效。 – dotNET
不,还是不行。 – qnyz