3

我正在使用一个过渡幻灯片控件,该控件具有绑定到 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 用作幻灯片放映控件的项目源有关,但我需要知道如何防止发生此错误。

谢谢!

4

2 回答 2

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;
于 2015-12-19T03:51:40.027 回答
0

我无法解释为什么会发生此错误。GeneratorPosition 由 ItemsControl 的ItemContainerGenerator使用,当您绑定到其 ItemsSource 属性并向源集合添加或删除项目时,它应该可以正常工作。清除源集合当然也是有效的操作。

该问题的一个可能解决方法是在每次切换到另一个图像目录时重置 ItemsSource。所以不要清除现有的集合

PicSlideShowCollection.Clear();

创建一个新集合并将 ItemsSource 设置为新集合:

PicSlideShowCollection = new ObservableCollection<string>();
slideShowControl.ItemsSource = PicSlideShowCollection;
于 2012-02-17T16:43:03.300 回答