¿Cómo puedo obtener una lista de todos los colores que puedo elegir en Visual Studio Designer (que es System.Windows.Media.Colors
, pero que no es una colección) y ponerlos en mi propio ComboBox
usando WPF y XAML?¿Cómo puedo incluir colores en WPF con XAML?
Respuesta
Aquí está la solución XAML puro.
En su sección de recursos, se utilizaría la siguiente:
<!-- Make sure this namespace is declared so that it's in scope below -->
.. xmlns:sys="clr-namespace:System;assembly=mscorlib" ..
<ObjectDataProvider MethodName="GetType"
ObjectType="{x:Type sys:Type}" x:Key="colorsTypeOdp">
<ObjectDataProvider.MethodParameters>
<sys:String>System.Windows.Media.Colors, PresentationCore,
Version=3.0.0.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35</sys:String>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
<ObjectDataProvider ObjectInstance="{StaticResource colorsTypeOdp}"
MethodName="GetProperties" x:Key="colorPropertiesOdp">
</ObjectDataProvider>
O, como CodeNaked points out, puede ser reducido a una etiqueta:
<ObjectDataProvider
ObjectInstance="{x:Type Colors}"
MethodName="GetProperties"
x:Key="colorPropertiesOdp" />
Y a continuación, el cuadro combinado se vería así:
<ComboBox Name="comboBox1"
ItemsSource="{Binding Source={StaticResource colorPropertiesOdp}}"
DisplayMemberPath="Name"
SelectedValuePath="Name" />
@casperOne - Su solución se puede condensar en una sola línea: '< ObjectDataProvider ObjectInstance = "{x: Type Colors}" MethodName = "GetProperties" x: Key = "colorPropertiesOdp" /> '. Esta respuesta es bastante antigua, por lo que tal vez no funcionó en ese momento. Pero probé con un proyecto .NET 3.0, 3.5 y 4.0 y funcionó siempre. – CodeNaked
Esto es lo que he hecho en una aplicación ASP.net pasado:
// populate colors drop down (will work with other kinds of list controls)
Type colors = typeof(System.Drawing.Color);
PropertyInfo[] colorInfo = colors.GetProperties(BindingFlags.Public |
BindingFlags.Static);
foreach (PropertyInfo info in colorInfo)
{
ddlColor.Items.Add(info.Name);
}
// Get the selected color
System.Drawing.Color selectedColor =
System.Drawing.Color.FromName(ddlColor.SelectedValue);
Aquí hay una gran ItemTemplate para usar en un combobox usando casperOne's code:
<ComboBox Name="cboColors"
ItemsSource="{Binding Source={StaticResource colorPropertiesOdp}}"
SelectedValuePath="Name">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Height="18" Margin="0,0,0,2">
<Border BorderThickness="1" CornerRadius="2"
BorderBrush="Black" Width="50" VerticalAlignment="Stretch"
Background="{Binding Name}"/>
<TextBlock Text="{Binding Name}" Margin="8,0,0,0"/>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
A continuación, se explica cómo hacerlo en código utilizando la reflexión. A continuación se volcará todos los nombres predefinidos de color WPF a la salida:
using System.Reflection;
void ListAllColors()
{
Type colorsType = typeof(System.Windows.Media.Colors);
PropertyInfo[] colorsTypePropertyInfos = colorsType.GetProperties(BindingFlags.Public | BindingFlags.Static);
foreach (PropertyInfo colorsTypePropertyInfo in colorsTypePropertyInfos)
Debug.WriteLine(colorsTypePropertyInfo.Name);
}
Y para ponerlos en un cuadro combinado, usted puede simplemente cambiar la última línea a:
_comboBox.Items.Add(colorsTypePropertyInfo.Name);
- 1. Uso de colores CMYK en WPF/XAML
- 2. ¿Puedo tener múltiples colores en un solo TextBlock en WPF?
- 3. Desactivar estilo en WPF XAML?
- 4. Grupos WPF RadioButton en Xaml
- 5. WPF Girar animación de rectángulo en XAML
- 6. WPF Imágenes contra XAML
- 7. ¿Puedo obtener enlaces fuertemente tipados en WPF/XAML?
- 8. Colores Styling WPF
- 9. XAML sin WPF - Animaciones
- 10. Condicional XAML (WPF)
- 11. ¿Cómo puedo establecer valores de colores personalizados en un campo Xaml Value?
- 12. StringFormat en XAML, WPF: formato de moneda
- 13. Acessing WPF XAML Resources from non-WPF code
- 14. WPF: ¿Cómo ocultar GridViewColumn usando XAML?
- 15. wpf xaml error de diseño
- 16. ¿Cómo puedo replicar 'float: right' en XAML?
- 17. ComboBox WPF enlazado a datos con opciones definidas en XAML?
- 18. WPF Galería de estilos XAML
- 19. ¿Cómo dibujar la rueda de colores en la aplicación WPF?
- 20. ¿Cómo puedo generar colores contrastantes?
- 21. WPF: ¿Alternando colores en un ItemsControl?
- 22. ¿Cómo puedo serializar xaml "Brush"?
- 23. ¿Cómo puedo definir una variable en XAML?
- 24. ¿Cómo hacer un gráfico de carga en WPF XAML?
- 25. Cómo agrupar ListBoxItems por primera letra en WPF usando XAML?
- 26. ¿Cómo declarar un espacio de nombres en WPF XAML?
- 27. XAML unificado para WPF y Silverlight con T4?
- 28. WPF: cómo hacer ComboBoxItems mantienen enteros en XAML
- 29. ¿Cómo desplazo una fila de cuadrícula en WPF/XAML?
- 30. En WPF XAML, ¿cómo puedo concatenar 2 constantes para que pueda usar rutas predefinidas?
similares a la sugerencia de CasperOne, aquí es una manera para hacerlo todo en XAML, con una buena pantalla de todo en un WrapPanel. http://stuff.seans.com/2011/02/14/creating-a-listbox-that-shows-all-predefined-wpf-colors/ –