2009-03-06 23 views
0

Uzun zaman önce this MSDN walkthrough'a baktım. Bir renk editörü uygular ve araç ipucu, rengin adını "Kırmızı" veya "Mavi" gibi kullanır. Bu iki bağlantı arasındaki fark nedir?

Bugün, benzer bir ListBox uygulayacağım; Renk ve yanındaki rengin adını içeren bir kutu görüntüler. Uygulamamın dışında, tüm renk adları # FFFF0000 ve # FF0000FF gibi onaltılık değerler olarak görüntülenir. Niye ya? İşte

hem projelerde kullanılan ColorsList sınıf var:

public ColorsList() 
{ 
    Type type = typeof(Colors); 
    foreach (PropertyInfo propertyInfo in type.GetProperties(BindingFlags.Public | BindingFlags.Static)) 
    { 
     if (propertyInfo.PropertyType == typeof(Color)) 
     { 
      Add((Color)propertyInfo.GetValue(null, null)); 
     } 
    } 
} 

Bu XAML pasajı ipucu (eğer örneklerde kodun geri kalanını görebilir) MSDN projesinde renk adını kullanmak yapar:

<ListBox x:Name="lstColors" Grid.Row="1" ItemsSource="{StaticResource colors}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <Rectangle Stroke="Black" 
          StrokeThickness="3" 
          Width="24" 
          Height="24" 
          RadiusX="5" 
          RadiusY="5"> 
        <Rectangle.Fill> 
         <SolidColorBrush Color="{Binding}" /> 
        </Rectangle.Fill> 
       </Rectangle> 
       <TextBlock Text="{Binding}" /> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
:
<ItemsControl.ItemTemplate> 
    <DataTemplate> 
     <Button Tag="{Binding}" Command="{x:Static PropertyEditing:PropertyValueEditorCommands.ShowInlineEditor}"> 
      <Button.Template> 
       <ControlTemplate> 
        <Border Width="30" Height="30" BorderBrush="Black" BorderThickness="1" CornerRadius="5"> 
         <Rectangle Width="22" Height="22" ToolTip="{Binding}"> 
          <Rectangle.Fill> 
           <SolidColorBrush Color="{Binding}"/> 
          </Rectangle.Fill> 
         </Rectangle> 
        </Border> 
       </ControlTemplate> 
      </Button.Template> 
     </Button> 
    </DataTemplate> 
</ItemsControl.ItemTemplate> 

İşte hex kodlarını üretir benim XAML varBana aynı görünüyor; fark ne?

cevap

0

Tasarım zamanı çalışma zamanından farklıdır. MSDN örneği, genişletilmiş özellik düzenleyicisi olarak kullanılır. Bir arkadaşının tavsiyesini aldım ve bir çalışma zamanı kontrolü olarak göstermeye çalıştım ve sihirli bir şekilde arkadaşça isimler yerine renkler için karma isimler elde ediyor. Temiz.

1

Tam olarak sorunuzun cevabı, bir gözlem daha:

yerine ObservableCollection<Color> ait ObservableCollection<string> devralan ve aşağıdaki satırı değiştirmek için ColorsList değiştirirseniz:

Add((Color)propertyInfo.GetValue(null, null)); 

Add(propertyInfo.Name); 

için

kodunuz çalışmasını istediğiniz gibi çalışacaktır. Rengi renk adına dönüştürmek yerine, bu, renk adından Renkli'ye dönüştürmeyi kullanarak başka bir şekilde tersine çevrilir.

Bir yan not olarak, XAML kodunu MSDN örneğinden denedim (yalnızca attığınız kısım) ancak araç ipuçları renk adlarını değil renk kodlarını görüntüler.

İlgili konular