c# - 实现显示下一张图片的方法

标签 c# wpf

我想制作一种从文件夹中更改图像的方法。 这是代码:

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/

相关文章:

c# - 使用 Visual Studio 创建您自己的 Firefox 插件

wpf - 如何删除 MenuItem 的图标列和文本之间的垂直线

c# - 获取类c#的路径

wpf - 如何在 WPF 应用程序中设置 TextBlock 和标签的默认颜色、字体系列和字体大小?

wpf - Prism:如何在区域中注入(inject) View 模型实例?

c# - 如何检查 wpf C# 中的鼠标按钮是左键还是右键?

c# - Entity Framework MVC 4 类问题

c# - 调度程序调用行为不一致

c# - 如何在我的项目中重用 xaml 命名空间定义

c# - 使用 SQL Server 在 Linq 中查询投票应用程序的帮助