我目前没有使用列表框和数据绑定,但是有可能让列表框像轮播一样工作,如果是的话,如何工作。
这就是我目前正在使用的,它只适用于添加图像,而不是通过列表框中的绑定...是否仍然可以修改以将每个绑定的画布+图像放在建议的答案中?
// 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);
}
答案 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}}。只需将更多图像项添加到可观察集合中,即可动态创建更多图像。