Silverlight ListBox与画布和图像的绑定

时间:2013-11-26 16:37:41

标签: c# silverlight binding listbox customization

我尝试制作自定义列表框:

<ListBox x:Name="ImageList" ItemsSource="{Binding ImageControls}" Width="256" Height="256" Margin="256,0,0,0">
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <Canvas/>
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
        <ListBox.ItemContainerStyle>
            <Style>
                <Setter Property="Canvas.Top" Value="{Binding Top}" />
                <Setter Property="Canvas.Left" Value="{Binding Left}" />
                <Setter Property="ListBoxItem.Width" Value="128" />
                <Setter Property="ListBoxItem.Height" Value="128" />
            </Style>
        </ListBox.ItemContainerStyle>
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel>
                    <Image Source="{Binding Source}" />
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

现在我遇到绑定问题...... ImageList.ItemsSource始终为空。

我有财产

public ObservableCollection<ImageControl> ImageControls; 

它包含

的集合
public class ImageControl
{
    public WriteableBitmap Source { get; set; }
    public int Top { get; set; }
    public int Left { get; set; }
}

我需要看到这样的想法: enter image description here

结果,在从代码中添加列表元素后,我希望接收像(带有源的图像)这样的项目:

        <ListBoxItem Canvas.Left="0" Canvas.Top="0" Width="128" Height="128">
            <Image x:Name="Image1"/>
        </ListBoxItem>
        <ListBoxItem Canvas.Left="128" Canvas.Top="0" Width="128" Height="128">
            <Image x:Name="Image2"/>
        </ListBoxItem>
        <ListBoxItem Canvas.Left="0" Canvas.Top="128" Width="128" Height="128">
            <Image x:Name="Image3"/>
        </ListBoxItem>
        <ListBoxItem Canvas.Left="128" Canvas.Top="128" Width="128" Height="128">
            <Image x:Name="Image4" />
        </ListBoxItem>

在代码中我添加了这样的图像:

ImageControls.Add(new ImageControl { Source = _bmp, Left = 0, Top = 0});

我做错了什么? 谢谢!

2 个答案:

答案 0 :(得分:0)

似乎问题是您在 ImageControl类中声明源属性的方式。它使用 WriteableBitmap (我没有使用它)。但是,在您的XAML代码中,图像控件源属性期望您指定一种字符串o Uri类型。 尝试将ImageControl类中的Source属性更改为字符串。

public class ImageControl
{
   public string Source { get; set; }
   public int Top { get; set; }
   public int Left { get; set; }
}

希望这个帮助

答案 1 :(得分:0)

作品!我添加到我的控件构造函数:

ImageControls = new ObservableCollection<ImageControl>();
(It was before)InitializeComponent();
ImageList.ItemsSource = ImageControls;

即。我在init上添加了绑定源。 后来我只使用我的ImageControls集合,如下所示:

ImageControls.Add(new ImageControl { Left = 128, Source = _bmp, Top = 0 });

列表框项目添加了!