我想制作一种从文件夹中更改图像的方法。 这是代码:
private void ShowNexImage()
{
BitmapImage image = new BitmapImage();
image.BeginInit();
string filename = ((ctr < 10) ? "images/Plane0" + ctr + ".jpeg" : "images/Plane" + ctr + ".jpeg");
image.UriSource = new Uri(filename, UriKind.Relative);
image.EndInit();
}
我需要如何修改所有内容才能正确运行我的应用程序? 可能需要修改这行代码
string filename = ((ctr < 10) ? "images/Plane0" + ctr + ".jpeg" : "images/Plane" + ctr + ".jpeg");
我已经发布了所有代码行以便更好地理解。
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
// Clear out placeholder content
this.wrapPanel.Children.Clear();
try
{
var files = Directory.GetFiles(ImagesDir);
int i = 0;
foreach (var file in files)
{
FileInfo fileInfo = new FileInfo(file);
var imageUri = new Uri(file, UriKind.Relative);
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.UriSource = imageUri;
bi.EndInit();
BaseWineModel baseModel = null;
string label = System.IO.Path.GetFileNameWithoutExtension(file);
if (fileInfo.Extension.EndsWith("jpg") ||
fileInfo.Extension.EndsWith("jpeg") ||
fileInfo.Extension.EndsWith("png") ||
fileInfo.Extension.EndsWith("gif"))
{
if (label.StartsWith("Group_"))
{
baseModel = new WineGroupModel();
baseModel.Image = imageUri;
label = label.Substring(6);
(baseModel as WineGroupModel).WinesDir = label;
}
else
{
baseModel = new WineModel();
baseModel.Image = imageUri;
var descFile = System.IO.Path.ChangeExtension(file, "txt");
if (File.Exists(descFile))
{
(baseModel as WineModel).Description = File.ReadAllText(descFile);
}
(baseModel as WineModel).Price = new Random().NextDouble();
}
var button = new KinectTileButton
{
Label = label,
Background = new ImageBrush(bi),
Tag = baseModel
};
this.wrapPanel.Children.Add(button);
}
}
}
public static readonly DependencyProperty ImagesDirProp = DependencyProperty.Register
(
"ImagesDir",
typeof(string),
typeof(ImagesGrid),
new PropertyMetadata(string.Empty)
);
public string ImagesDir
{
get { return (string)GetValue(ImagesDirProp); }
set { SetValue(ImagesDirProp, value); }
}
最佳答案
不不不。不要那样做。让 WPF 为您完成这项工作。在实现“INotifyPropertyChanged”接口(interface)的 ViewModel 中创建一个代表当前查看图像的属性。
public partial class MainWindow : Window
{
private MyMainViewModel VM {get;set;}
public MainWindow()
{
InitializeComponent();
VM = new MyMainViewModel()
this.Content = VM;
}
private void Btnsend_Click(object sender, RoutedEventArgs e)
{
VM.NextImage();
}
}
XML 看起来像这样
<Window Name ="Window2" Content={Binding}>
<Grid>
<Image Source={Binding CurrentImage} />
</Grid>
</Window2>
ViewModel 看起来像这样
public class MyMainViewModel:INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private ImageSource _currentImage;
public ImageSource CurrentImage
{
get
{
return _currentImage ;
}
set
{
_currentImage = value;
OnPropertyChanged("CurrentImage");
}
}
public void NextImage()
{
// here come the code that load the next image, as ever you see it fit
//CurrentImage = ....
}
}
如果这没有建立,请不要生气。我正在把它写出来。 无论如何,.... 花点时间研究 MVVM 和数据绑定(bind)到 ViewModels。那里有大量的教程。我真的会得到返回。它将真正使开发变得有趣。 ;)
关于c# - 实现显示下一张图片的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23779238/