2012-05-31 3 views
0

J'ai tenté de remplir une liste multiséléctronique avec les couleurs supportées dans WP7.1, mais j'ai des problèmes pour générer une liste de ces couleurs dans le code derrière. Jusqu'à présent, ma solution est la suivante:comment créer une liste de couleurs multiples

ColorListPage.xaml

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
     <toolkit:MultiselectList x:Name="ColorList" ItemsSource="{Binding}" Height="88" HorizontalAlignment="Left" VerticalAlignment="Top" >     
      <DataTemplate> 
       <StackPanel Orientation="Horizontal" Margin="16,21,0,20"> 
        <Rectangle Fill="{Binding}" Width="50" Height="50"/> 
        <TextBlock Text="{Binding}" Margin="12,10,0,0"/> 
       </StackPanel> 
      </DataTemplate>     
     </toolkit:MultiselectList> 

et je tente de DataBind aux propriétés du rectangle et TextBlock tels que le rectangle sera rempli d'une valeur SolidColorBrush et la textblock il constituera contient le nom du solidcolorbrush correspondant. C'est où je suis coincé, car je ne peux pas comprendre comment accomplir ceci? Plus précisément, je n'essaie pas d'appeler les couleurs d'accent, mais toutes les options de couleur disponibles (par exemple vu lors de la définition du remplissage du rectangle explicite il y a une énorme liste d'options).

Répondre

1

Voulez-vous un MultiSelectList ou un ListPicker? Voulez-vous que l'utilisateur puisse choisir plus d'une couleur? Voici un exemple qui utilise un ListPicker. Pour obtenir les couleurs, vous devrez créer les couleurs vous-même. Voici un exemple en utilisant des couleurs d'accent

Le XAML pour la ListPicker:

 <toolkit:ListPicker x:Name="ColorPicker" ExpansionMode="FullScreenOnly" 
          FullModeHeader="COLOR" 
          Visibility="Collapsed" 
          ItemsSource="{Binding Brushes}" 
          SelectedItem="{Binding SelectedBrush, Mode=TwoWay}"> 
      <toolkit:ListPicker.FullModeItemTemplate> 
       <DataTemplate> 
        <StackPanel Margin="0 20" Orientation="Horizontal"> 
         <Rectangle Width="42" Height="42" Fill="{Binding Brush}" 
           Stroke="{StaticResource PhoneForegroundBrush}" 
           HorizontalAlignment="Left"/> 
         <TextBlock Text="{Binding Name}" Style="{StaticResource PhoneTextExtraLargeStyle}" 
            HorizontalAlignment="Center" Margin="5,0"/> 
        </StackPanel> 
       </DataTemplate> 
      </toolkit:ListPicker.FullModeItemTemplate> 
     </toolkit:ListPicker> 

Et le code pour générer la collection de couleurs:

private IList<ColorItem> CreateBrushes() 
    { 
     var brushes = new List<ColorItem> 
     { 
      new ColorItem { Brush = new SolidColorBrush(Color.FromArgb(255,27,161,226)), Name = "blue" },  
      new ColorItem { Brush = new SolidColorBrush(Color.FromArgb(255,160,80,0)), Name = "brown" },  
      new ColorItem { Brush = new SolidColorBrush(Color.FromArgb(255, 51,153,51)), Name = "green" }, 
      new ColorItem { Brush = new SolidColorBrush(Color.FromArgb(255,162,193,57)), Name = "lime" }, 
      new ColorItem { Brush = new SolidColorBrush(Color.FromArgb(255,216,0,115)), Name = "magenta" }, 
      new ColorItem { Brush = new SolidColorBrush(Color.FromArgb(255,240,150,9)), Name = "mango" }, 
      new ColorItem { Brush = new SolidColorBrush(Color.FromArgb(255,230,113,184)), Name = "pink" }, 
      new ColorItem { Brush = new SolidColorBrush(Color.FromArgb(255,162,0,255)), Name = "purple" }, 
      new ColorItem { Brush = new SolidColorBrush(Color.FromArgb(255,229,20,0)), Name = "red" },  
      new ColorItem { Brush = new SolidColorBrush(Color.FromArgb(255,0,171,169)), Name = "teal" },  
     }; 
     return brushes; 
    } 



public class ColorItem 
{ 
    public SolidColorBrush Brush { get; set; } 
    public string Name { get; set; } 
} 

Vous pouvez également utiliser la réflexion pour obtenir la collection des couleurs.

 Type t = typeof(Colors); 
     var properties = t.GetProperties(); 
     List<ColorItem> items = new List<ColorItem>(); 

     for (int i = 0; i < properties.Length; i++) 
     { 
      var property = properties[i]; 
      items.Add(new ColorItem 
      { 
       Name = property.Name, 
       Color = new SolidColorBrush((Color)property.GetValue(null, null)) 
      }); 
     } 
+0

merci pour votre réponse. Je voudrais en effet que l'utilisateur sélectionne autant de couleurs que possible en utilisant une Multiselectlist. J'ai vu des exemples de couleurs d'accent de liaison à une liste, mais puisqu'il y a plusieurs couleurs intégrées pour les options de remplissage (comme la fumée blanche, Beige, DarkMagenta, etc.) je me demandais s'il y avait un moyen plus facile d'appeler ces couleurs une liste à lier à la Multiselectlist? Je ne sais pas comment obtenir ces couleurs autrement qu'en définissant explicitement un premier plan, un remplissage, ou quoi que ce soit dans xaml, puis en sélectionnant dans la liste peuplée d'options de couleurs qui en résulte. – Matthew

+0

ajouté une autre solution, espérons que cela aide –

Questions connexes