2011-03-15 89 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>