我正在使用Transitionals幻灯片控件,该控件具有绑定到itemsource的可观察字符串集合。这些字符串是幻灯片中每个图片的文件路径。当我第一次加载WPF应用程序时,它正确运行此方法(使用目录路径生成PicSlideShowCollection):
public void SelectImages(string path)
{
// Validate
if (string.IsNullOrEmpty(path)) throw new ArgumentException("path");
PicSlideShowCollection.Clear();
// Get directory info for specified path
DirectoryInfo di = new DirectoryInfo(path);
// Image mask
string[] extensions = new string[] { "*.jpg", "*.png", "*.gif", "*.bmp" };
// Search for all
foreach (string extension in extensions)
{
foreach (FileInfo fi in di.GetFiles(extension.ToLower()))
{
PicSlideShowCollection.Add(fi.FullName);
}
}
}
但是,我有一个按钮,允许用户更改幻灯片中使用的图像目录并重新运行上述方法。当执行该操作时,我收到此错误:
传递给Remove的GeneratorPosition'-1,1'没有Offset相等 到0。
这发生在PicSlideShowCollection.Clear()指令上。 如果我评论该指令,新目录图像会添加到原始目录图片中,这不是我想要的。
我知道这与将PicSlideShowCollection用作幻灯片放映控件的项目源有关,但我需要知道如何防止出现此错误。
谢谢!
答案 0 :(得分:1)
Slideshow.AutoAdvance = false;
Slideshow.SelcetedIndex=-1;
var count=PicSlideShowCollection.Count;
forearch(var item in newsources)
{
PicSlideShowCollection.Add(item);
}
while(count--)
PicSlideShowCollection.RemoveAt(0);
Slideshow.SelcetedIndex=0;
答案 1 :(得分:0)
我无法解释为什么会出现此错误。 GeneratorPosition由ItemsControl的ItemContainerGenerator使用,当您绑定到其ItemsSource属性并向源集合添加项目或从源集合中删除项目时,它应该可以正常工作。清除源集合当然也是一种有效的操作。
问题的可能解决方法是每次切换到另一个图像目录时重置ItemsSource。因此,而不是清除现有的集合
PicSlideShowCollection.Clear();
创建一个新集合并将ItemsSource设置为新集合:
PicSlideShowCollection = new ObservableCollection<string>();
slideShowControl.ItemsSource = PicSlideShowCollection;