2010-10-27 21 views
0

J'ai un Silverlight DataGrid avec deux colonnes. Les en-têtes de ces deux colonnes doivent être affichés avec une zone de texte et un titre ou un nom d'en-tête de colonne afin que la zone de texte puisse être utilisée pour le filtrage ultérieur.En-tête de colonne silverlight disparaît lors de l'application du modèle de style en-tête

Alors, je l'ai utilisé le code ci-dessous pour afficher la zone de texte en utilisant un style:

<Style x:Name="mytemplate" 
     x:Key="mytemplate" 
     xmlns:dataprimitives="clr-namespace:System.Windows.Controls.Primitives;assembly=System.Windows.Controls.Data" 
     TargetType="dataprimitives:DataGridColumnHeader"> 
    <Setter Property="ContentTemplate" > 
     <Setter.Value> 
      <DataTemplate x:Name="ColHeaderTemplategrid">      
       <StackPanel>        
        <TextBox x:Name="txtfilterBox" KeyDown="txtfilterBox_KeyDown" Width="40"/> 
       </StackPanel> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

et j'ai appliqué le style à les en-têtes de colonnes comme ci-dessous:

((DataGridTextColumn)column[0]).HeaderStyle = mytemplate; 
((DataGridTextColumn)column[1]).HeaderStyle = mytemplate; 

La chose est, maintenant la zone de texte est visible mais le titre ou le nom d'en-tête de colonne disparaît? Comment afficher mon en-tête de colonne avec la zone de texte?

+0

Utilisez-vous une sorte de liaison pour les en-têtes de colonnes? – Gabe

+0

non je n'utilise pas de liaison il lie automatiquement l'en-tête précédemment, mais après avoir appliqué ce style à l'en-tête de colonne je ne pouvais pas voir le nom d'en-tête de colonne – subash

+0

Eh bien ce serait parce que votre modèle a seulement une zone de texte dans le modèle qui afficherait l'en-tête comme un 'textblock' ou quelque chose de similaire. – Gabe

Répondre

1

Comme u dit que je vient d'être inséré textblock dans la StackPanel du modèle et permet de résoudre le problème

le code ci-dessous est

<Style x:Name="mytemplate" x:Key="mytemplate" xmlns:dataprimitives="clr-namespace:System.Windows.Controls.Primitives;assembly=System.Windows.Controls.Data" 
          TargetType="dataprimitives:DataGridColumnHeader"> 
      <Setter Property="ContentTemplate" > 
       <Setter.Value> 
        <DataTemplate x:Name="ColHeaderTemplategrid"> 
         <StackPanel> 
          <TextBlock Text="{Binding}" ></TextBlock> 
          <TextBox x:Name="txtfilterBox" KeyDown="txtfilterBox_KeyDown" Width="40"/> 
         </StackPanel> 

        </DataTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style>