1

我想遍历文件夹中的所有文件,并为找到的每个 JPEG 文件动态创建图像控件。完成后,我想要一个包含动态创建的图像控件的表单(想想几乎任何照片查看软件,例如具有缩略图视图的 Picasa)。

我希望能够通过实现某种拖放事件处理程序来重新排序表单上这些动态创建的图像控件。我不知道我会遇到多少图像,因此无法为每个可能存在或不存在的图像控件硬编码事件处理程序。所以我正在寻找一种将事件处理程序动态添加到动态创建的控件的方法。

下面代码中使用的方法几乎就是我要找的。下面方法的问题是,如果我不知道控件的名称,我就无法对事件处理程序进行硬编码。

public partial class RoutedEventAddRemoveHandler {
  void MakeButton(object sender, RoutedEventArgs e)
  {
      Button b2 = new Button();
      b2.Content = "New Button";
      // Associate event handler to the button. You can remove the event  
      // handler using "-=" syntax rather than "+=".
      b2.Click  += new RoutedEventHandler(Onb2Click);
      root.Children.Insert(root.Children.Count, b2);
      DockPanel.SetDock(b2, Dock.Top);
      text1.Text = "Now click the second button...";
      b1.IsEnabled = false;
  }
  void Onb2Click(object sender, RoutedEventArgs e)
  {
      text1.Text = "New Button (b2) Was Clicked!!";
  } 
}

注意我正在寻找 C# 代码而不是 XAML 的解决方案。这是使用这样的代码添加控件的解决方案:

// What I want
Fields.Add(new Field() { Name = "Username", Length = 100, Required = true });

不是这样的:

// What I do not want
<TextBox Width="100" Canvas.Left="50" Canvas.Top="20" />

谢谢

4

2 回答 2

2

我不会在代码隐藏中做太多事情。只为获取文件。我会得到一个 ObservableCollection,其中字符串是文件的全名。然后我会将它呈现在 ListBox 或 ListView 中,并将 ItemSource 绑定到集合并为控件定义一个好的 ItemTemplate。在模板中,您可以使用转换器为模板中的图像创建 å Source。

于 2012-12-26T23:36:48.003 回答
0

添加一个小示例只是为了节省您在 WPF 代码隐藏中加载图像的痛苦。

void OnButtonClick(object sender, RoutedEventArgs routedEventArgs)
{
    var files = Directory.GetFiles(@"C:\img");
    foreach (var file in files)
    {
        var bitmap = new BitmapImage();
        bitmap.BeginInit();
        bitmap.UriSource = new Uri(file);
        bitmap.CacheOption = BitmapCacheOption.OnLoad;
        bitmap.EndInit();
        var img = new Image { Source = bitmap };
        img.MouseDown += OnImageMouseDown;
        //Add img to your container
    }
}

void OnImageMouseDown(object sender, MouseButtonEventArgs e)
{
    var img = sender as Image;
    //Operate
}
于 2012-12-26T23:19:51.917 回答