locked
Kleines Problem mit TempalteBinding in einem CustomControl RRS feed

  • Allgemeine Diskussion

  • Hallo Zusammen,
    ich habe ein kleines Problem mit TempalteBinding in einem CustomControl.

    Ich habe eine Property wie folgt definiert:
    public static readonly DependencyProperty GroupNameProperty = 
    
      DependencyProperty.Register("GroupName", 
    
             typeof(string), 
    
             typeof(DynamicViewItem), 
    
             new PropertyMetadata("DynamicViewItem"));
    
    public string GroupName
    
    {
    
     get { return (string)GetValue(GroupNameProperty); }
    
     set { SetValue(GroupNameProperty, value); }
    
    }
    
    

    Das Template für mein Control (leitet von ItemsControl ab) ist folgendes:
    <Style TargetType="local:DynamicViewItem">
    
     <Setter Property="GroupName" Value="DynamicViewItem" />
    
     <Setter Property="Template">
    
      <Setter.Value>
    
       <ControlTemplate>
    
        <toolkit:Expander x:Name="PART_HeaderedContentControl" 
    
             Style="{StaticResource DynamicViewExpanderStyle}" 
    
             Header="{TemplateBinding GroupName}">
    
         <ItemsPresenter />
    
        </toolkit:Expander>
    
       </ControlTemplate>
    
      </Setter.Value>
    
     </Setter>
    
     <Setter Property="ItemsPanel">
    
      <Setter.Value>
    
       <ItemsPanelTemplate>
    
        <toolkit:WrapPanel Name="WrapPanel1" Orientation="Horizontal" />
    
       </ItemsPanelTemplate>
    
      </Setter.Value>
    
     </Setter>
    
     <Setter Property="ItemTemplate">
    
      <Setter.Value>
    
       <DataTemplate>
    
        <ContentPresenter />
    
       </DataTemplate>
    
      </Setter.Value>
    
     </Setter>
    
    </Style>
    
    
    Man sieht, wie ich versuche per TemplateBinding die Property GroupName an die Header-Property des Expanders zu binden.
    Laut diversen Tutorials habe ich folgendes Attribut an mein CustomControl zu setzen:
    [TemplatePart(Name = "PART_HeaderedContentControl", Type = typeof(Expander))]
    
    
    Dabei entspricht der Part-Name dem x:Name des Expanders. Beschrieben ist es zumindest hier:
    http://www.kunal-chowdhury.com/2011/04/how-to-implement-template-binding-in.html

    Führe ich das jetzt allerdings aus, erhalte ich folgende Fehlermeldung:
    Die Eigenschaft "GroupName" wurde in Typ "System.Windows.Controls.Control" nicht gefunden.
    Die Zeilen und Positionsangaben verweisen eindeutig auf das TemplateBinding auf meine Property.

    Warum tut das nicht? Meinem Verständis nach sollte ich doch auf alle Properties meines Controls zugreifen können, oder? Was habe ich vergessen?  
    Etwas irritierend ist, dass das ganz mit einem CostumControl funktioniert, dass con Control erbt. Handelt es sich aber um ein ItemsControl bekomme ich besagte Fehlermeldung
    Viele Grüße
    Jürgen

    Montag, 20. Juni 2011 14:46

Alle Antworten

  • Hallo Jürgen,

    setz mal im ContentTemplate den TargetType auch auf "local:DynamicViewItem"

    Montag, 20. Juni 2011 17:06
    Beantworter