列表框旋转木马 - 有可能吗?

时间:2010-09-17 09:08:40

标签: silverlight xaml

我目前没有使用列表框和数据绑定,但是有可能让列表框像轮播一样工作,如果是的话,如何工作。

这就是我目前正在使用的,它只适用于添加图像,而不是通过列表框中的绑定...是否仍然可以修改以将每个绑定的画布+图像放在建议的答案中?

// add images to the stage
public void addImages()
        {
            var itemCollection = GalleryModel.DocItemCollection;
            foreach (var item in itemCollection)
            {
                var url = item.ImageUrl;
                var image = new Image
                                {
                                    Source = new BitmapImage(new Uri(url, UriKind.RelativeOrAbsolute))
                                };

                image.Width = 90;
                image.Height = 60;

                // add the image
                LayoutRoot.Children.Add(image);

                // Add template here?


                // reposition the image
                posImage(image, itemCollection.IndexOf(item));
                _images.Add(image);

                var containingWidth = ActualWidth;
                var numberofItemsShown = containingWidth/100;
                if (itemCollection.IndexOf(item) < Math.Ceiling(numberofItemsShown)-1)
                    moveIndex(1);
            }
        }




// move the index
private void moveIndex(int value)
        {
            _target += value;
            _target = Math.Max(0, _target);
            _target = Math.Min(_images.Count - 1, _target);
        }

// reposition the image
private void posImage(Image image , int index){
            double diffFactor = index - _current;

            double left = _xCenter - ((IMAGE_WIDTH + OFFSET_FACTOR) * diffFactor);
            double top = _yCenter;

            image.SetValue(Canvas.LeftProperty, left);
            image.SetValue(Canvas.TopProperty, top);
}

1 个答案:

答案 0 :(得分:2)

对于这样的情况,您通常会使用ListBox

它的XAML看起来像这样:

<ListBox x:Name="ImageGalleryListBox">
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <tkt:WrapPanel />
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>

    <ListBox.ItemTemplate>
        <DataTemplate>
            <Image Source="{Binding MyImageItemUri}" Margin="8" Width="100" Height="100" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

您当然可以进一步模拟它,使事物看起来像您想要的那样。

在此处或您的视图模型中的代码隐藏中,您将创建具有MyImageItemUri属性的类,并将其实例添加到ObservableCollection<T>。然后,您可以将集合绑定或设置为ItemsSource的{​​{1}}。只需将更多图像项添加到可观察集合中,即可动态创建更多图像。