2009-08-21 8 views
0

Je suis nouveau à l'utilisation du ControlTemplate. J'écris mon premier contrôle mais j'ai (ce qui me semble) un problème très étrange.TemplateBinding ne fonctionne pas avec les objets de structure .NET

Toutes les propriétés de dépendance que je fais TemplateBinding au travail, mais les propriétés des objets .NET Framework à savoir la propriété Content d'un ContentControl ou la propriété d'un ItemsItemsControl ne sont pas peuplées lors de l'exécution.

Je suis sûr que je manque quelque chose ... Juste ce qu'il est, je ne sais pas ...

Un exemple du code est ci-dessous:

La classe est très simple au moment:

public class Title : ContentControl 
{ 
} 

Et le modèle est:

<Style TargetType="{x:Type UI:Title}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type UI:Title}"> 
       <TextBlock Text="{TemplateBinding Content}" /> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

la base ContentControl cl ass est la classe .NET située dans l'espace de noms System.Windows.Controls.Control.

Merci,

Adam

+0

Pourriez-vous ajouter un extrait de code pour montrer ce qui ne fonctionne pas? – Bubblewrap

+0

Désolé à ce sujet. J'en ai ajouté un maintenant. Merci. – Adam

Répondre

1

Je crois que si vous souhaitez remplacer où le Content est placé, vous pouvez le faire en utilisant un ContentPresenter.

<Style TargetType="{x:Type UI:Title}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type UI:Title}"> 
       <Label> 
        <ContentPresenter /> 
       </Label> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Remarque J'ai aussi changé d'un TextBlock à une étiquette que je crois que la propriété TextBlock.Text n'acceptera tout de ContentControl.Content. Voici un exemple que j'ai mis ensemble qui fonctionne comme prévu:

<Window x:Class="ContentControlTest.Window1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:ContentControlTest" 
     Title="Window1" Height="300" Width="300"> 
    <Window.Resources> 
     <Style TargetType="{x:Type local:Title}"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type local:Title}"> 
         <Button> 
          <ContentPresenter /> 
         </Button> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </Window.Resources> 
    <local:Title> 
     <TextBlock Text="Happy Days!" /> 
    </local:Title> 
</Window> 
+0

Je viens d'essayer votre suggestion. Cela ne semble pas fonctionner ... J'ai fait un peu plus d'investigation et il semble que peu importe quand je mets la propriété elle ne soit pas affichée mais si je mets une valeur dans le constructeur de la classe Titre en assignant une valeur au La propriété de contenu est alors affichée ... – Adam

+0

Des idées? Merci pour votre avis. – Adam

+0

J'ai mis à jour avec un exemple de travail. – user7116

0

Vous devrez peut-être implémenter l'interface INotifyPropertyChanged sur vos objets et INotifyCollectionChanged vos collections.

Questions connexes