2009-03-06 20 views
0

昔、私はthis MSDN walkthroughを見ました。それはカラーエディタを実装し、ツールチップは "赤"または "青"のような色の名前を使用します。これらの2つのバインディングの違いは何ですか?

今日、私は同様のListBoxを実装しています。色と色の名前が表示されたボックスが表示されます。私のアプリケーションを除いて、#FFFF0000と#FF0000FFのような16進数の色名がすべて表示されます。どうして?ここで

は両方のプロジェクトで使用される ColorsListクラスです:

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

このXAMLスニペットツールチップは、(あなたがチュートリアルで、コードの残りの部分を見ることができます)MSDNプロジェクトで色の名前を使用します:

ここで
<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> 

は、16進コードを生成し、私のXAMLです:

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

それは私には同じように見えます。違いは何ですか?

答えて

0

デザイン時が実行時と異なります。 MSDNの例は、拡張プロパティエディタとして使用されます。私は友人の助言を受けてランタイムコントロールとして公開しようとしましたが、魔法のようにフレンドリーな名前の代わりに色のハッシュ名を取得しています。きちんとした

1

ない正確にあなたの質問への答え、観察より:

あなたの代わりにObservableCollection<Color>ObservableCollection<string>から継承し、次の行を変更するColorsListを変更する場合:

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

Add(propertyInfo.Name); 

にします

あなたのコードはうまく動作します。 Colorをcolor nameに変換するのではなく、色名からColorへの組み込みの変換を使用して、逆の方法をとっています。

補足として、私はMSDNサンプル(あなたが引用している部分のみ)からXAMLコードを試しましたが、ツールチップにカラー名とカラーコードが表示されませんでした。

関連する問題