我正在WPF中创建一个简单的“Pairs”游戏。我在MainWindow上有12个Image控件。我需要做的是使用OpenFileDialog选择多个图像(可以少于全部6个),然后随机将它们放入图像控件中。每张图片应该出现两次。我怎么能做到这一点?我被困在这里一段时间,目前只有以下代码。我不是要求解决方案,我只需要一些关于如何处理这个问题的指示。谢谢。
> public ObservableCollection<Image> GetImages()
{
OpenFileDialog dlg = new OpenFileDialog();
dlg.Multiselect = true;
ObservableCollection<Image> imagesList = new ObservableCollection<Image>();
if (dlg.ShowDialog() == true)
{
foreach (String img in dlg.FileNames)
{
Image image = new Image();
image.Name = "";
image.Location = img;
imagesList.Add(image);
}
}
return imagesList;
}
答案 0 :(得分:0)
有很多方法可以达到您所需的效果。一个好方法是使用Directory.GetFiles
method,它将返回string
个文件路径的集合:
string [] filePaths = Directory.GetFiles(targetDirectory);
然后,您可以使用方法随机化集合的顺序。从DotNETPerls上的C# Shuffle Array页面:
public string[] RandomizeStrings(string[] arr)
{
List<KeyValuePair<int, string>> list = new List<KeyValuePair<int, string>>();
// Add all strings from array
// Add new random int each time
foreach (string s in arr)
{
list.Add(new KeyValuePair<int, string>(_random.Next(), s));
}
// Sort the list by the random number
var sorted = from item in list
orderby item.Key
select item;
// Allocate new string array
string[] result = new string[arr.Length];
// Copy values to array
int index = 0;
foreach (KeyValuePair<int, string> pair in sorted)
{
result[index] = pair.Value;
index++;
}
// Return copied array
return result;
}
然后添加重复的文件路径,再次重新随机化订单并使用以下项填充您的UI属性:
string[] filePathsToUse = new string[filePaths.Length * 2];
filePaths = RandomizeStrings(filePaths);
for (int count = 0; count < yourRequiredNumber; count++)
{
filePathsToUse.Add(filePaths(count));
filePathsToUse.Add(filePaths(count));
}
// Finally, randomize the collection again:
ObservableCollection<string> filePathsToBindTo = new
ObservableCollection<string>(RandomizeStrings(filePathsToUse));
当然,您也可以通过许多其他方式来实现,一些更容易理解,一些更有效。只需选择一种您觉得舒服的方法。