2009-08-21 9 views
0

Ich bin neu in der Verwendung der ControlTemplate. Ich schreibe meine erste Kontrolle, aber ich habe (was mir scheint) ein sehr seltsames Thema.TemplateBinding funktioniert nicht mit .NET Framework-Objekten

Alle Abhängigkeitseigenschaften, die ich TemplateBinding zu arbeiten, aber alle Eigenschaften von .NET Framework-Objekte das heißt die Content Eigenschaft eines ContentControl oder Items Eigenschaft eines ItemsControl nicht zur Laufzeit besiedelt bekommen.

Ich bin sicher, ich bin etwas fehlt ... Genau das, was es ist, ich weiß nicht ...

Ein Beispiel für den Code ist unten:

Die Klasse im Moment sehr einfach:

public class Title : ContentControl 
{ 
} 

Und die Vorlage ist:

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

die Basis ContentControl cl ass ist die .NET-Klasse im System.Windows.Controls.Control-Namespace.

Danke,

Adam

+0

Könnten Sie ein Code-Snippet hinzufügen, um zu zeigen, was nicht funktioniert? – Bubblewrap

+0

Entschuldigung. Ich habe jetzt eins hinzugefügt. Vielen Dank. – Adam

Antwort

1

Ich glaube, wenn Sie überschreiben möchten, wo die Content platziert ist, können Sie das mit einer ContentPresenter tun.

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

Hinweis Ich habe auch von einem Textblock auf ein Etikett geändert, wie ich die TextBlock.Text Eigenschaft glaube nicht alles von ContentControl.Content akzeptieren. Hier ist ein Beispiel, das ich zusammengestellt habe, das wie beabsichtigt funktioniert:

<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

Ich habe gerade Ihren Vorschlag ausprobiert. Es scheint nicht zu funktionieren ... Ich habe ein wenig mehr Nachforschungen angestellt und es scheint, dass egal, wenn ich die Eigenschaft setze, es nicht angezeigt wird, aber wenn ich einen Wert in den Konstruktor der Title-Klasse lege, der dem Wert einen Wert zuweist Content-Eigenschaft dann wird es angezeigt ... – Adam

+0

Irgendwelche Ideen? Danke für Ihre Rückmeldung. – Adam

+0

Ich habe mit einem Arbeitsbeispiel aktualisiert. – user7116

0

Möglicherweise müssen Sie die INotifyPropertyChanged-Schnittstelle auf Ihre Objekte und INotifyCollectionChanged auf Ihre Sammlungen implementieren.

Verwandte Themen