2011-09-19 6 views
1

J'ai un contrôle d'accordéon, voici le XAML:Silverlight liant un HeaderTemplate

<UserControl x:Class="CasesPage" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit"  
mc:Ignorable="d" 
d:DesignHeight="1050" d:DesignWidth="1600"> 
<UserControl.Resources> 
    <DataTemplate x:Key="AccordionItemHeaderTemplate"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto"/> 
       <ColumnDefinition Width="Auto"/> 
       <ColumnDefinition Width="Auto"/> 
      </Grid.ColumnDefinitions> 
      <TextBlock Text="{Binding CaseName}"/> 
     </Grid> 
    </DataTemplate> 
</UserControl.Resources> 
<Border Margin="20,20,0,20" Background="White" BorderBrush="Transparent" BorderThickness="0" CornerRadius="10"> 
<toolkit:Accordion Margin="30" Name="CasesListAccordion" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" ItemContainerStyle="{StaticResource AccordionContainerStyleLawBot}" BorderBrush="{x:Null}" SelectionMode="ZeroOrOne" SelectionSequence="CollapseBeforeExpand" Style="{StaticResource NewAccordionStyle}" 
        ItemsSource="{Binding}" AccordionButtonStyle="{StaticResource AccordionButtonStyleNotEdited}" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" Foreground="Black" Background ="White" 
     SelectedItemsChanged="CasesListAccordion_SelectedItemsChanged"> 
    </toolkit:Accordion> 
</Border> 

Dans mes ressources de contrôle de l'utilisateur, j'ai aussi un modèle de données que je veux utiliser pour HeaderTemplate dans chaque accordéon article.

Les éléments d'accordéon sont remplis à partir du code, je le fais parce que je les reçois dynamiquement.

Voici le code:

foreach(ECase Case in Cases) 
     { 
      //Create an accordion item 
      AccordionItem item = new AccordionItem(); 
      item.Tag = Case; 
      item.DataContext = Case; 
      item.HeaderTemplate = (DataTemplate)this.Resources["AccordionItemHeaderTemplate"]; 



     } 

Le ECASE de classe a un membre appelé CaseName. Je lie ce membre dans le XAML dans le DataTemplate au textblock:

<DataTemplate x:Key="AccordionItemHeaderTemplate"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto"/> 
       <ColumnDefinition Width="Auto"/> 
       <ColumnDefinition Width="Auto"/> 
      </Grid.ColumnDefinitions> 
      <TextBlock Text="{Binding CaseName}"/> 
     </Grid> 
    </DataTemplate> 

Et je lui assigne aussi le DataContext du accordionItem au ECASE:

item.DataContext = Case; 

Et toujours le CaseName ne figure pas dans l'en-tête de l'objet accordéon.

Des pensées?

Répondre

2

Vous devez affecter l'objet à la propriété Header à la place.

Essayez

item.Header = Case; 
+1

Cela a fonctionné! Je vous remercie – Gil