代码之家  ›  专栏  ›  技术社区  ›  Christopher

如何使用XAML在WPF中列出颜色?

  •  15
  • Christopher  · 技术社区  · 17 年前

    如何在Visual Studio Designer中获取我可以选择的所有颜色的列表( System.Windows.Media.Colors ,但那不是收藏)并把它们放进我自己的 ComboBox

    4 回复  |  直到 15 年前
        1
  •  31
  •   Community Mohan Dere    9 年前

    在您的资源部分,您将使用以下内容:

    <!-- 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>
    

    CodeNaked points out ,它可以简化为一个标签:

    <ObjectDataProvider 
        ObjectInstance="{x:Type Colors}" 
        MethodName="GetProperties" 
        x:Key="colorPropertiesOdp" />
    

    <ComboBox Name="comboBox1" 
        ItemsSource="{Binding Source={StaticResource colorPropertiesOdp}}"
        DisplayMemberPath="Name"
        SelectedValuePath="Name" />
    
        2
  •  10
  •   Community Mohan Dere    9 年前

    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>
    
        3
  •  7
  •   casperOne    15 年前

    以下是我在过去的ASP.net应用程序中所做的操作:

    // 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);
    
        4
  •  -1
  •   Eternal21    11 年前

    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);
    }
    

    _comboBox.Items.Add(colorsTypePropertyInfo.Name); 
    
    推荐文章