Этот вопрос появляется для всех поисков языка. Следовательно, для Котлина решение является чем-то вроде ниже:
val photoRef = FirebaseStorage.getInstance()
.reference.child("images/stars.jpg")
// Code ommited - Do some saving - putFile
photoRef.downloadUrl.addOnSuccessListener({ uri ->
product.imageUrl = uri.toString()
})
Однако это нехорошее решение. Вам лучше сохранить путь, а затем перестроить полный URL по требованию. Например:
photoRef.downloadUrl.addOnSuccessListener({ uri ->
val imagePath = uri.toString()
// Save to database
})
Теперь вы можете использовать его позже и только по запросу:
FirebaseStorage.getInstance().reference.child(product.imageUrl).downloadUrl
.addOnSuccessListener { uri ->
String imageUrl = uri.toString()
// Load in images
}
Вы должны использовать ItemsControl
, как показано ниже. Он использует вертикальную StackPanel как панель по умолчанию для своих элементов.
<ItemsControl x:Name="imageItems">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Image Source="{Binding}" Margin="5"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Установите ItemsSource
элемента ItemsControl следующим образом:
imageItems.ItemsSource = Directory.EnumerateFiles(FOLDERPATH, "*.png");
Преобразование из строки пути в ImageSource
выполняется путем преобразования встроенного типа в WPF.
Вы можете использовать другую ItemsPanel следующим образом:
<ItemsControl ...>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
...
</ItemsControl>