none
combobox de colores en SL4? RRS feed

  • Pregunta

  • alguien sabe como hacer un combobox con colores, es decir con cada item del combobox de un color distinto, pueden postear el codigo?, en realidad me interesa hacerlo en tiempo de ejecucion (no con estilos) si alguien sabe como hacerlo se los agradeceria

    "La imaginacion es mas importante que el conocimiento." -> Albert Einstein

    miércoles, 12 de septiembre de 2012 15:44

Respuestas

  • probe tu ejemplo y no me funciono, pero encontre otro codigo mas legible y que si aplica para mi caso, espero les sirva

    (this.comboBox1.Items[0] as ComboBoxItem).Background = new SolidColorBrush(Color.FromArgb(255, 255, 0, 0));
                (this.comboBox1.Items[1] as ComboBoxItem).Background = new SolidColorBrush(Color.FromArgb(255, 0, 255, 0));
                (this.comboBox1.Items[2] as ComboBoxItem).Background = new SolidColorBrush(Color.FromArgb(255, 0, 0, 255));
    saludos,


    "La imaginacion es mas importante que el conocimiento." -> Albert Einstein

    • Marcado como respuesta gblumen miércoles, 12 de septiembre de 2012 19:20
    miércoles, 12 de septiembre de 2012 19:19

Todas las respuestas

  • Hola estimado,

    Puedes asignar colores en tiempo de ejecución en base al valor del item utilizando un convertidor de valor y una plantilla para los items del combobox, este sería un ejemplo:

    C#

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    
    namespace FirstApp
    {
        public partial class MainPage : UserControl
        {
            public MainPage()
            {
                InitializeComponent();
    
                List<Persona> personas = new List<Persona>();
                personas.Add(new Persona(){nombre = "aaa"});
                personas.Add(new Persona() { nombre = "bbb" });
                personas.Add(new Persona() { nombre = "ccc" });
    
                this.cmbPrueba.ItemsSource = personas;
            }
        }
    
        public class Persona
        {
            public String nombre { get; set; }
        }
    
        public class ColorValueConverter : IValueConverter
        {
    
            public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                String valor = (String)value;
    
                switch (valor)
                {
                    case "aaa":
                        return new SolidColorBrush(Colors.Blue);
                    case "bbb":
                        return new SolidColorBrush(Colors.Yellow);
                    default:
                        return new SolidColorBrush(Colors.Green);
                }
    
            }
    
            public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                throw new NotImplementedException();
            }
        }
    }

    XAML

    <UserControl x:Class="FirstApp.MainPage"
        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:local="clr-namespace:FirstApp"
        mc:Ignorable="d"
        d:DesignHeight="300" d:DesignWidth="400">
    <UserControl.Resources>
        <local:ColorValueConverter x:Key="ColorValueConverter" />
    </UserControl.Resources>
        
        <Grid x:Name="LayoutRoot" Background="White">
            <ComboBox x:Name="cmbPrueba" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="120" >
                <ComboBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Background="{Binding nombre, Converter={StaticResource ResourceKey=ColorValueConverter}}">
                            <TextBlock Text="{Binding nombre}"></TextBlock>
                        </StackPanel>
                    </DataTemplate>
                </ComboBox.ItemTemplate>
            </ComboBox>
    
        </Grid>
    </UserControl>
    

    Si necesitas que sea aleatorio o algun otro tipo de lógica, puedes codificarla en el método Convert de la clase ConvertValueConverter,

    Espero que te sirva para lo que estas viendo,

    Saludos

    miércoles, 12 de septiembre de 2012 17:37
  • probe tu ejemplo y no me funciono, pero encontre otro codigo mas legible y que si aplica para mi caso, espero les sirva

    (this.comboBox1.Items[0] as ComboBoxItem).Background = new SolidColorBrush(Color.FromArgb(255, 255, 0, 0));
                (this.comboBox1.Items[1] as ComboBoxItem).Background = new SolidColorBrush(Color.FromArgb(255, 0, 255, 0));
                (this.comboBox1.Items[2] as ComboBoxItem).Background = new SolidColorBrush(Color.FromArgb(255, 0, 0, 255));
    saludos,


    "La imaginacion es mas importante que el conocimiento." -> Albert Einstein

    • Marcado como respuesta gblumen miércoles, 12 de septiembre de 2012 19:20
    miércoles, 12 de septiembre de 2012 19:19