2009-07-06 14 views
3

Ich baue ein Silverlight-Steuerelement und ich versuche, Bindungen für die Header und Body ContentControls über ihre jeweiligen DataTemplates einzurichten. Ich bin mir nicht sicher warum, aber das funktioniert nicht (lautlos). Meine einzige Vermutung ist, dass die DataTemplates StaticResources sind. Kann jemand Rat geben? Die Steuerung verfügt über die folgenden Standardvorlage:Bindung von innerhalb eines DataTemplate?

<Style TargetType="local:LayoutItem"> 
<Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="local:LayoutItem"> 
      <StackPanel> 
       <StackPanel.Resources> 

        <DataTemplate x:Key="DefaultHeaderTemplate"> 
         <StackPanel> 
          <TextBlock Text="{Binding HeaderText}" FontSize="15"/> 
         </StackPanel> 
        </DataTemplate> 

        <DataTemplate x:Key="DefaultBodyTemplate"> 
         <StackPanel> 
          <TextBlock Text="{Binding BodyText}" FontSize="12"/> 
         </StackPanel> 
        </DataTemplate> 

       </StackPanel.Resources> 

       <ContentControl x:Name="Header" 
        ContentTemplate="{StaticResource DefaultHeaderTemplate}" /> 
       <ContentControl x:Name="Body" 
        ContentTemplate="{StaticResource DefaultBodyTemplate}" /> 
      </StackPanel> 
     </ControlTemplate> 
    </Setter.Value> 

Dank!


aktualisieren

arbeiten Eigentlich ist der folgende Code auch nicht, so könnte meine Vermutung über die StaticResources falsch sein.

<ContentControl x:Name="Header"> 
<ContentControl.ContentTemplate> 
    <DataTemplate x:Key="DefaultHeaderTemplate"> 
     <StackPanel> 
      <TextBlock Text="{Binding HeaderText}" FontSize="15" /> 
     </StackPanel> 
    </DataTemplate> 
</ContentControl.ContentTemplate> 
</ContentControl> 
+0

Ist der DataContext für das Steuerelement irgendwo festgelegt. Haben die Daten, an die Sie binden, die Eigenschaft "HeaderText" und "BodyText"? –

+0

Ja, ich bin mir ziemlich sicher, dass das stimmt. Als Beweis kann ich ContentControl durch ersetzen und es funktioniert. –

Antwort

3

Ich hasse es, meine eigene Frage zu beantworten, aber ich habe es funktioniert. Es war wirklich aufgrund eines anderen Problems. Für die Zukunft, der folgende Code funktioniert für mich:

<Style TargetType="local:LayoutItem"> 
<Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="local:LayoutItem"> 
      <StackPanel x:Name="LayoutRoot"> 
       <StackPanel.Resources> 

        <DataTemplate x:Key="DefaultHeaderTemplate"> 
         <StackPanel> 
          <TextBlock FontSize="50" Text="{Binding Path=HeaderText}" /> 
         </StackPanel> 
        </DataTemplate> 

       </StackPanel.Resources> 

       <ContentControl x:Name="Header" Content="{Binding}" ContentTemplate="{StaticResource DefaultHeaderTemplate}" /> 

      </StackPanel> 
     </ControlTemplate> 
    </Setter.Value> 
</Setter> 

Bitte den Inhalt beachten = "{Binding}" zusätzlich. Das war wichtig. :)

+0

Ist der 'Pfad' in' Binding' nicht extra? –

+0

Schön, .. gerade was ich vermisst habe. +1 – Stimul8d

1

Sie müssen den Datenkontext der Seite irgendwo einstellen.

<UserControl ...> 
    <UserControl.Resources> 
     <myNS:MyClass x:Name="TheContext" x:Key="TheContext" /> </UserControl.Resources> 
    <Grid x:Name="LayoutRoot" Background="White" DataContext="{StaticResource TheContext}" > 
     <TextBlock Text="{Binding Path=Field1}" /> 
    </Grid> 
</UserControl> 

Siehe auch this post

+0

Wie in den obigen Kommentaren erwähnt, setze ich bereits den DataContext. –

1

Dies funktioniert auf meinem (3 Beta):

 <ContentControl x:Name="Header"> 
      <ContentControl.ContentTemplate> 
       <DataTemplate > 
        <StackPanel> 
         <TextBlock Text="{Binding HeaderText}" FontSize="15" /> 
        </StackPanel> 
       </DataTemplate> 
      </ContentControl.ContentTemplate> 
      <ContentPresenter /> 
     </ContentControl> 

kann jedoch in den Code hinter

/// ctor 
public MyClass() 
{ 
    this.DataContext = ObjectThatIsDataContext; 
} 

oder in XAML erfolgen Ich weiß nicht, warum es funktioniert ... Ich dachte, es wäre, weil du deine Vorlage um den Moderator herumlegen könntest, aber die Ich habe ein bisschen mehr gespielt und festgestellt, dass alles, was Sie in den Content Presenter einpacken, komplett ignoriert wird.

Verwandte Themen