2016-10-16 11 views
0

Silverlight ComboBox에 이미지와 텍스트를 표시하고 싶습니다. WPF에서 이미지와 이름으로 색상을 표시하는 ItemTemplate 예제를 발견했습니다. Silverlight에서 동일한 xml 결과는 빈 줄이됩니다. 따라서 모든 항목에 대해 항목이 생성되고 Name 속성에 바인딩되지 않습니다. Silverlight는 WPF와는 다른 바인딩이 필요합니까?silverlight 콤보 박스 itemtemplate 바인딩

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     cmbColors.ItemsSource = typeof(Colors).GetProperties(); 
    } 
} 

XML 작동하지 않습니다 Color의 이름을 결합하여 RectangleFill을 설정하려고

<UserControl x:Class="SilverlightColors.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" 
    d:DesignHeight="300" d:DesignWidth="400"> 

    <Grid x:Name="LayoutRoot" Background="White"> 
     <StackPanel > 
      <ComboBox Name="cmbColors" > 
       <ComboBox.ItemTemplate > 
        <DataTemplate > 
         <StackPanel Orientation="Horizontal"> 
          <Rectangle Fill="{Binding Name}" Width="16" Height="16" Margin="0,2,5,2"/> 
          <TextBlock Text="{Binding Name}"/> 
         </StackPanel> 
        </DataTemplate> 
       </ComboBox.ItemTemplate> 
      </ComboBox> 
     </StackPanel> 
    </Grid> 
</UserControl> 

답변

0

:

는 샘플입니다. XAML은 다음과 같은 특수 마법을 사용합니다.

<Rectangle Fill="White" Width="16" Height="16" Margin="0,2,5,2"/> 

따라서 GetProperties()에서 반환 된 PropertyInfo의 "Name"속성이 "Black", "white"또는 "Yellow"이면 직접 사용할 수 없습니다. 당신이해야 할 일은 이름과 브러쉬 사전을 만들고 각각에 다른 색을 할당 한 다음 콤보 상자의 데이터 소스를 바인딩하는 것입니다.

이 코드는 작동합니다

.cs :

var list = typeof(Colors).GetProperties(); 
var brushes = new Dictionary<string, SolidColorBrush>(); 
foreach (var colour in list) 
{ 
    brushes.Add(colour.Name, new SolidColorBrush((Color)colour.GetValue(colour, null))); 
} 
cmbColors.ItemsSource = brushes; 

XAML :

<ComboBox Name="cmbColors" 
      VerticalAlignment="Center" 
      HorizontalAlignment="Center"> 
    <ComboBox.ItemTemplate > 
     <DataTemplate > 
      <StackPanel Orientation="Horizontal"> 
       <Rectangle Fill="{Binding Value}" Width="16" Height="16" Margin="0,2,5,2"/> 
       <TextBlock Text="{Binding Key}"/> 
      </StackPanel> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox>