WPF:将标签/ TextBlock包装在矩形边框中

时间:2011-03-15 12:29:08

标签: wpf label textblock

我想在画布上画一个大号,用矩形包裹,但我不知道该怎么做。我的想法是创建一个样式,然后将它应用于一些改变其大小的Label实例:

<Style x:Key="CountdownLabel" TargetType="Label">
<Setter Property="FontFamily" Value="Arial"></Setter>
<Setter Property="Foreground" Value="Navy"></Setter>
<Setter Property="FontWeight" Value="Bold"></Setter>
<Setter Property="FontSize" Value="40"></Setter>
<Setter Property="FontStretch" Value="UltraExpanded"></Setter>
<Setter Property="Control.Template">
    <Setter.Value>
        <ControlTemplate>
            <Border>
                <Rectangle Margin="0,0,0,0" Stroke="#60000000" StrokeThickness="1" StrokeDashArray="1 2" />
            </Border>
        </ControlTemplate>
    </Setter.Value>
</Setter>

我在代码隐藏中设置label.Content=number.ToString(),但未显示该数字。另外,我不知道如何调整标签大小以填充Canvas父级。

问候。

1 个答案:

答案 0 :(得分:0)

您需要在模板中更正两件事:

  1. 你没有包含ContentPresenter,所以没有什么可以告诉布局系统“哦,顺便说一句,这里你应该在Label的Content属性中插入什么内容。”
  2. 您需要在ControlTemplate上指定TargetType。 (只是在模板不工作时学会尝试的其中一项。)
  3. 这是一个有效的调整版本。我将边框更改为网格,因此它可以容纳两个子控件(虚线边框的矩形和显示内容的ContentPresenter)。我从example on MSDN偷走了ContentPresenter声明;它可能不完整,但它应该让你开始。

    <Style x:Key="CountdownLabel" TargetType="Label">
      <Setter Property="FontFamily" Value="Arial"/>
      <Setter Property="Foreground" Value="Navy"/>
      <Setter Property="FontWeight" Value="Bold"/>
      <Setter Property="FontSize" Value="40"/>
      <Setter Property="FontStretch" Value="UltraExpanded"/>
      <Setter Property="Control.Template">
        <Setter.Value>
          <ControlTemplate TargetType="Label">
            <Grid>
              <Rectangle Margin="0,0,0,0" Stroke="#60000000" StrokeThickness="1"
                         StrokeDashArray="1 2" MinWidth="10" MinHeight="10"/>
              <ContentPresenter
                HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                RecognizesAccessKey="True" />
            </Grid>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>