2011-03-15 3 views
0

Je voudrais dessiner un grand nombre sur un canevas, enveloppé dans un rectangle, mais je ne sais pas comment le faire. Mon idée est de créer un style, puis l'appliquer à une instance d'étiquette qui change sa taille:WPF: Envelopper une étiquette/TextBlock dans une bordure rectangulaire

<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> 

Je mis label.Content=number.ToString() dans le code-behind, mais le nombre n'est pas montré. De plus, je ne saurais pas comment redimensionner l'étiquette pour remplir le parent Canvas.

Cordialement.

+1

Pouvez-vous fournir d'autres extraits de code, tels que la façon dont vous appliquez ce style à votre liste et à votre code? – Lav

Répondre

0

Il y a deux choses que vous devez corriger dans votre modèle:

  1. Vous n'incluez pas ContentPresenter, donc il n'y a rien à dire au système de mise en page « oh, en passant, voici où vous devez insérer Qu'y a-t-il dans la propriété Contenu de l'étiquette ".
  2. Vous devez spécifier TargetType sur votre ControlTemplate. (Juste une de ces choses que vous apprenez à essayer lorsque les modèles ne fonctionnent pas.)

Voici une version ajustée qui fonctionne. J'ai changé votre bordure en une grille afin qu'elle puisse accueillir deux contrôles enfants (le rectangle pour la bordure en pointillés, et un ContentPresenter pour afficher le contenu). J'ai volé la déclaration ContentPresenter d'un example on MSDN; Ce n'est peut-être pas complet, mais ça devrait vous aider à démarrer.

<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> 
Questions connexes