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!!";
  } 
}

XAMLではなくc#コードで解決策を探していることに注意してください。これは、次のようなコードを使用してコントロールを追加するソリューションです。

// 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

コードビハインドではあまりやりません。ファイルを取得するためだけに。文字列がファイルのFullNameであるObservableCollectionを取得します。次に、それをListBoxまたはListViewに表示し、ItemSourceをコレクションにバインドし、コントロールに適切なItemTemplateを定義します。テンプレートでは、コンバーターを使用して、テンプレート内の画像のソースを作成できます。

于 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 に答える