我是c#和WPF的新手,并尝试构建一个循环浏览文件夹并逐个显示图像的应用程序。当显示最后一个时,它需要再次显示第一个。
我尝试命名所有文件1.jpg,2.jpg等等,然后循环浏览图片数量。但是,如果我删除一个,那么就会出错。
有没有更好的方法来实现这个目标?
我正在使用C#和WPF窗口,网格中有图像。
任何帮助都会受到很大关注!
编辑:当前代码
private string[] files;
private System.Timers.Timer timer;
private int counter;
private int Imagecounter;
public IntroScreen()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(this.MainWindow_Loaded);
}
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
setupPics();
}
private void setupPics()
{
timer = new System.Timers.Timer();
timer.Elapsed += new ElapsedEventHandler(timer_Tick);
timer.Interval = (2000);
timer.Enabled = true;
timer.Start();
files = Directory.GetFiles("../../Resources/Taken/", "*.jpg", SearchOption.TopDirectoryOnly);
Imagecounter = files.Length;
counter = 0;
}
private void timer_Tick(object sender, EventArgs e)
{
counter++;
Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() =>
{
Picture.Source = new BitmapImage(new Uri(files[counter - 1], UriKind.Relative));
}));
if (counter == Imagecounter)
{
counter = 0;
}
}
这不起作用,它找到文件夹中的项目,但图像不会改变。
它不会返回错误,图像也不会显示。
有人有任何建议吗?
答案 0 :(得分:1)
以下使用RX对我有用。
的Xaml
<Image Grid.Row="1" Source="{Binding AppViewModel.MainImageSource}" Width="400" Stretch="Uniform" Margin="{StaticResource MarginNormalControl}" />
查看型号:
SlideshowImages = ( from path in Directory.EnumerateFiles( pathSlideshow )
select new Uri( path ) ).ToList();
if ( SlideshowImages.Any() )
{
SlideshowIndex = 0;
var timer = Observable.Interval( TimeSpan.FromSeconds( 2 ) ).TimeInterval();
timer.Subscribe( _ =>
{
++SlideshowIndex;
if ( SlideshowIndex >= SlideshowImages.Count() )
SlideshowIndex = 0;
MainImageSource = SlideshowImages[SlideshowIndex];
} );
}