Come posso ottenere l'elenco di tutti i colori che posso selezionare in Visual Studio Designer (che è System.Windows.Media.Colors
, ma non è una raccolta) e inserirli nel mio ComboBox
utilizzando il markup WPF e XAML?Come posso elencare i colori in WPF con XAML?
risposta
ecco la soluzione XAML puro.
Nella sezione delle risorse, si può usare questa:
<!-- 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, come CodeNaked points out, può essere ridotto a un tag:
<ObjectDataProvider
ObjectInstance="{x:Type Colors}"
MethodName="GetProperties"
x:Key="colorPropertiesOdp" />
E poi la casella combinata sarebbe simile a questa:
<ComboBox Name="comboBox1"
ItemsSource="{Binding Source={StaticResource colorPropertiesOdp}}"
DisplayMemberPath="Name"
SelectedValuePath="Name" />
@casperOne - La tua soluzione può essere ridotta a una riga: '< ObjectDataProvider ObjectInstance = "{x: Type Colors}" MethodName = "GetProperties" x: Key = "colorPropertiesOdp" /> '. Questa risposta è abbastanza vecchia, quindi forse non ha funzionato al momento. Ma ho provato con un progetto .NET 3.0, 3.5 e 4.0 e ha funzionato ogni volta. – CodeNaked
Ecco quello che ho fatto in un passato ASP.net app:
// 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);
Qui è un grande ItemTemplate da utilizzare per una casella combinata 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>
Ecco come farlo nel codice utilizzando la riflessione. Di seguito vi scaricare tutti i nomi dei colori WPF predefiniti di uscita:
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);
}
E per metterli in una casella combinata, si potrebbe semplicemente cambiare l'ultima riga a:
_comboBox.Items.Add(colorsTypePropertyInfo.Name);
- 1. Utilizzo dei colori CMYK in WPF/XAML
- 2. Dove posso trovare i modelli XAML per un DataGrid WPF?
- 3. WPF: il potere in XAML
- 4. come posso confrontare i colori in java?
- 5. Come compilare la combobox wpf in xaml
- 6. Come posso elencare TUTTI i record DNS?
- 7. WPF senza XAML
- 8. Posso avere più colori in un singolo TextBlock in WPF?
- 9. wpf xaml designer bug
- 10. Come posso elencare i metodi in un modulo Python 2.5?
- 11. WPF Ruota animazione rettangolo in XAML
- 12. Come posso elencare i post della stessa categoria in Jekyll?
- 13. Come posso collegare i file xaml e xaml.cs
- 14. WPF XAML Style Gallery
- 15. Blurry Adorner WPF XAML
- 16. Come utilizzare stringformat in multibinding in WPF XAML
- 17. Come posso elencare tutti i moduli in un repository CVS?
- 18. XAML condizionale (WPF)
- 19. Come posso elencare tutti i vhosts in nginx
- 20. Come posso elencare tutti i pad in Etherpad-lite
- 21. Come posso elencare i file di una directory in Rust?
- 22. Associazione WAGF Datagrid per elencare i problemi
- 23. Posso riutilizzare i colori in Interface Builder?
- 24. Converti WPF (XAML) Controllo in documento XPS
- 25. Implementazione selettore colori WPF
- 26. Come posso allineare rapidamente i controlli in una finestra WPF?
- 27. Buone istruzioni per l'accessibilità in WPF/XAML?
- 28. Imposta nome intestazione colonna in XAML-WPF
- 29. ComboBox WPF associato a dati con scelte definite in XAML?
- 30. WPF: Come nascondere GridViewColumn utilizzando XAML?
Simile al suggerimento di CasperOne, ecco un modo per fare tutto in XAML, con una bella visualizzazione di tutto in un WrapPanel. http://stuff.seans.com/2011/02/14/creating-a-listbox-that-shows-all-predefined-wpf-colors/ –