2010-12-18 4 views
0

J'ai défini un style dans mon fichier de ressources comme ci-dessousSilverlight Listbox style personnalisé

<Style x:Name="ListBoxStyle" TargetType="ListBox" > 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="ListBox">      
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Text="{Binding Name,Mode=TwoWay}" 
           Margin="5" 
           Foreground="Red"> 
        </TextBlock> 
        <TextBlock Text="{Binding Age,Mode=TwoWay}" 
           Margin="5"> 
        </TextBlock> 
       </StackPanel> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter>  
</Style> 

Je suis à une perte de quoi mettre ici dans le modèle de données

<ListBox x:Name="MyList" ItemsSource="{Binding }"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

J'ai essayé d'utiliser

<ContentPresenter Style="{StaticResource ListBoxStyle}"></ContentPresenter> 

et même

<ContentControl Style="{StaticResource ListBoxStyle}"></ContentControl>` 

mais a obtenu cette erreur

Impossible d'attribuer à la propriété 'System.Windows.FrameworkElement.Style'.

Que dois-je mettre entre les balises DataTemplate si je veux fournir un style personnalisé?

+0

Que voulez-vous accomplir? Vous avez défini un style pour 'ListBox' et vous essayez de l'appliquer sur' ContentPresenter' et 'ContentControl'. Ce n'est pas correct. – decyclone

+0

Je veux définir le style de la liste dans un autre fichier de ressources et dans mon page.xaml, je me réfère à ce style. Quelle est la bonne façon? – user20358

Répondre

0

Essayez:

<ListBox x:Name="MyList" ItemsSource="{Binding }"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
<StackPanel Orientation="Horizontal"> 
        <TextBlock Text="{Binding Name,Mode=TwoWay}" 
           Margin="5" 
           Foreground="Red"> 
        </TextBlock> 
        <TextBlock Text="{Binding Age,Mode=TwoWay}" 
           Margin="5"> 
        </TextBlock> 
       </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Ce shpuld résoudre votre problème.

Si vous définissez un style, vous définissez à quoi ressemble le composant ListBox (arrière-plan, premier plan, ...). Vous pouvez obtenir le style par défaut ici: http: //msdn.microsoft.com/en-us/library/cc278062 (v = vs.95) .aspx

Le ItemTemplate (c'est un DataTemplate) définit, comment a la présentation des données d'un seul élément de la liste ressemble à (Vous utilisez des liaisons et ainsi de suite ...).

Si vous souhaitez définir un style pour les éléments individuels, comme MouseOver, Focussed, ... vous écrivez un style pour les ListBoxItems. Vous pouvez l'ajouter à la zone de liste via ItemContainerStyle.

<ListBox ItemContainerStyle="{StaticResource YourResourceKey}"/>