2012-05-01 3 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에서 직접적인 방법이 없습니다. 소스 코드에서 Colors의 속성을 수집하고 투명하게 제거해야합니다. 결과 컬렉션을 xaml에서보다 더 안전한 방식으로 바인딩 할 수있는 속성에 넣을 수 있습니다. –

답변

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;