2011-03-15 58 views
0

我想在Canvas上绘制一个很大的数字,用矩形包裹,但我不知道该怎么做。我的想法是创建一个样式,然后把它应用到改变其大小一些Label实例:WPF:在矩形边框中包裹标签/ TextBlock

<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

你能否提供更多的代码片段,比如你如何将这种风格应用于你的标签和你的代码? – Lav 2011-03-15 12:33:53

回答

0

有你需要在你的模板来纠正两件事情:

  1. 你不包括ContentPresenter,所以没什么好说的布局系统“哦,对了,这里就是你应该插入标签的内容属性中有什么“。
  2. 您需要在ControlTemplate上指定TargetType。 (只是你在模板不工作时学习尝试的那些东西之一。)

这是一个调整后的版本。我将边框更改为网格,以便它可以容纳两个子控件(用于虚线边框的矩形和用于显示内容的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>