0

こんにちは、最後のファイルが再生された後、リストボックスのプレイリストを繰り返したいと思います。リストボックスの先頭まで繰り返すようにインデックスをリセットするにはどうすればよいですか? Shownextimage は、メディアを 1 つずつ処理して、メディア要素に表示します。DispatcherTimer は Images を 20 秒表示してから続行します。

これは私が得たものです。

    Dictionary<string, string> Listbox1Dict = new Dictionary<string, string>();
    public static List<string> images = new List<string> { ".JPG", ".JPE", ".BMP", ".GIF", ".PNG" }; // Bildtyper som stöds
    public static List<string> movies = new List<string> { ".WMV", ".WAV", ".SWF", ".MP4", ".MPG", ".AVI" };
    List<string> paths = new List<string>();
    DispatcherTimer dispatcherTimer = new DispatcherTimer();
    DispatcherTimer NextImageTimer = new DispatcherTimer();
    int x = 20;
    private int currentSongIndex = -1;
    private void ShowNextImage()
    {
        if (currentSongIndex == -1)
        {
            currentSongIndex = Listbox1.SelectedIndex;
        }
        currentSongIndex++;

        var selected = Listbox1.Items[currentSongIndex];
        string s = selected.ToString();
        if (Listbox1Dict.ContainsKey(s))
        {

            if (images.Contains(System.IO.Path.GetExtension(s).ToUpperInvariant()))
            {

                if (currentSongIndex < Listbox1.Items.Count)
                {
                    mediaElement1.Source = new Uri(Listbox1Dict[s]);

                }
            }
            else if (movies.Contains(System.IO.Path.GetExtension(s).ToUpperInvariant()))
            {
                if (currentSongIndex < Listbox1.Items.Count)
                {
                    dispatcherTimer.Stop();
                    mediaElement1.Source = new Uri(Listbox1Dict[s]);
                }
            }
        }
    }

タイマー:

    private void dispatcherTimer_Tick(object sender, EventArgs e)
    {
            ShowNextImage();
    }
    private void dispatch()
    {
        dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
        dispatcherTimer.Interval = new TimeSpan(0, 0, 0, x);
    }
4

1 に答える 1

0

たぶん、このようなものがあなたが望むものです:

<StackPanel>
    <ListBox SelectedIndex="{Binding ElementName=Index, Path=Value}">
        <ListBoxItem>First</ListBoxItem>
        <ListBoxItem>Second</ListBoxItem>
        <ListBoxItem>Third</ListBoxItem>
    </ListBox>
    <Slider x:Name="Index" Minimum="0" Maximum="2" Value="2" TickFrequency="1" IsSnapToTickEnabled="True" TickPlacement="BottomRight"/>
</StackPanel>

このサンプルでは、​​リストボックスの選択されたインデックスがスライダーの値にバインドされています。スライダーは、変更されたときに通知する ViewModel の indexproperty に置き換える必要があります。index prop は、曲の再生が終了するとインクリメントされ、曲が最後の曲である場合は 0 に設定されます。これは vm で処理する必要があると思います。

于 2013-04-25T08:58:09.420 に答える