2012-05-01 40 views
0

我不想在我的应用程序ComboBox中使用颜色列表,但我不会将此列表包含在透明颜色中。列表中的附加颜色必须来自Colors类。 我在网上搜索,发现类似的东西:在没有透明颜色的ComboBox中列出颜色

<ObjectDataProvider MethodName="GetType" 
ObjectType="{x:Type System:Type}" x:Key="colorsTypeOdp"> 
     <ObjectDataProvider.MethodParameters> 
      <System:String>System.Windows.Media.Colors, PresentationCore, 
     Version=3.0.0.0, Culture=neutral, 
     PublicKeyToken=31bf3856ad364e35</System:String> 
     </ObjectDataProvider.MethodParameters> 
    </ObjectDataProvider> 
    <ObjectDataProvider ObjectInstance="{StaticResource colorsTypeOdp}" 
MethodName="GetProperties" x:Key="colorPropertiesOdp"> 
    </ObjectDataProvider> 

<ComboBox Width="80" ItemsSource="{Binding Source={StaticResource colorPropertiesOdp}}"> 
         <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> 

任何人都知道如何做到这一点TAKS?谢谢你的帮助。

+0

没有在XAML直接的方式。您必须在源代码中收集颜色的属性并手动删除透明的属性。你可以把结果集合放在一个可以从xaml绑定的属性中,比现在更清晰。 – 2012-05-01 19:03:15

回答

0

我建议你从Colors类中创建Color实例的自己的列表,并从此列表中排除Colors.Transparent颜色。然后,您可以将此列表绑定到您的组合框的ItemsSource属性。

要从Colors类获得Color实例的列表,你可以使用下面的代码片段:

PropertyInfo[] properties = typeof(Colors).GetProperties(); 

foreach (PropertyInfo property in properties) 
    Color color = property.GetValue(null, null) as Color;