3

itemsource にバインドされた監視可能な文字列のコレクションを持つ Transitionals Slideshow コントロールを使用しています。これらの文字列は、slidehow 内の各画像へのファイル パスです。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 に答える