将颜色绑定到ListPicker

时间:2013-01-21 21:39:38

标签: c# xaml binding windows-phone-7.1 listpicker

我正在尝试创建一个包含级别列表的ListPicker控件,每个级别旁边都有一个彩色方块。这就是我所拥有的:

<toolkit:ListPicker Grid.Row="1"
                    x:Name="LevelList"
                    Header="Level"
                    ItemCountThreshold="0"
                    FontFamily="Segoe WP Light">
  <toolkit:ListPicker.ItemTemplate>
    <DataTemplate>
      <StackPanel Orientation="Horizontal">
        <Rectangle Fill="{Binding}"
                   Width="43"
                   Height="43" />
        <TextBlock Text="{Binding}"
                   Margin="12 0 0 0" />
      </StackPanel>
    </DataTemplate>
  </toolkit:ListPicker.ItemTemplate>
  <toolkit:ListPicker.FullModeItemTemplate>
    <DataTemplate>
      <StackPanel Orientation="Horizontal"
                  Margin="16 21 0 20">
        <Rectangle Fill="{Binding}"
                   Width="43"
                   Height="43" />
        <TextBlock Text="{Binding}"
                   Margin="16 0 0 0"
                   FontSize="43"
                   FontFamily="{StaticResource PhoneFontFamilyLight}" />
      </StackPanel>
    </DataTemplate>
  </toolkit:ListPicker.FullModeItemTemplate>
</toolkit:ListPicker>

在c#部分,我有

    String[] Level= { "E1", "E2", "E3", "E4", "E5"};
    String[] colors = { "#FFE5AD1B", "#FF0050EF", "#FFE51400", "#FF008A00", "#FFAA00FF" };

    public TolonPk()
    {
        InitializeComponent(); 
        this.listaNivel.ItemsSource = Level;
        this.listaNivel.ItemsSource = colors;
    }

我的问题是我不知道如何严格地将Textblock绑定到Level String数组并且矩形填充到颜色... 我可能错过了一些简单的东西,但我似乎无法得到它......

1 个答案:

答案 0 :(得分:0)

如果toolkit:ListPicker像其他WPF ItemsControl子类一样使用ItemsSource,那么你需要在同一个列表中同时包含Level字符串和Color字符串。

创建一个包含level级别字符串和颜色字符串的结构/类。

public struct LevelAndColor
{
    public String Level { get; set; }
    public String Color { get; set; }
}

创建一些IEnumerable(List,ObservableCollection等)并用你的水平颜色对实例填充它。

在绑定中,像这样绑定:

<StackPanel Orientation="Horizontal">
    <Rectangle Fill="{Binding Color}" Width="43" Height="43"/>
    <TextBlock Text="{Binding Level}" Margin="12 0 0 0"/>
</StackPanel>