Вы должны использовать элемент Image, у которого свойство Source связано со свойством ImageSource в модели представления. Это «стандартный» способ, основанный на архитектурном паттерне MVVM, и, следовательно, «лучший» - на мой взгляд.
<Image Source="{Binding Image}"/>
Модель вида может выглядеть так:
public class ViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private ImageSource image;
public ImageSource Image
{
get { return image; }
set
{
image = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Image)));
}
}
}
и его экземпляр будет присвоен DataContext окна:
public AboutWindow()
{
InitializeComponent();
var vm = new ViewModel();
DataContext = vm;
}
Для тестирования, приведенный ниже код выполняет слайд-шоу файлов изображений в каталоге. Вы также можете назначить любой другой ImageSource - например, DrawingImage - для свойства Image.
var imageFiles = Directory.GetFiles(..., "*.jpg");
var index = -1;
var timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(1) };
timer.Tick += (s, e) =>
{
if (++index < imageFiles.Length)
{
vm.Image = new BitmapImage(new Uri(imageFiles[index]));
}
else
{
timer.Stop();
}
};
timer.Start();