我发现这段代码可以将图片添加到WPF中的ListView中。但是它只显示图像位置而不是实际图像:
var image = new BitmapImage();
string fileName = @"C:\Peak Sourcing\Work\ppt_test\slides_png\slide1.png";
using (var stream = new FileStream(fileName, FileMode.Open))
{
image.BeginInit();
image.CacheOption = BitmapCacheOption.OnLoad;
image.StreamSource = stream;
image.EndInit();
}
ListBoxItem item = new ListBoxItem();
Thumbnails.Items.Add(image);
背后的XAML很简单:
<ListView Name="Thumbnails" Margin="10,10,804,10" >
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="1"/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
我也发现很少有其他代码,但所有代码只是将图像位置显示为字符串而不是图像。你能帮我解决一下吗?
答案 0 :(得分:5)
这可以添加到XAML:
/usr/include/x86_64-linux-gnu
你需要一个模型:
<?php
$w = 0;
for ($i = 0; $i < count($newGambar); $i++) {
if ($w % 4 == 0){
$banyak++;
}
$w++;
echo $banyak;
?>
}
背后的代码示例:
<ListView x:Name="lv" Background="WhiteSmoke"
Height="500"
ItemsSource="{Binding models}">
<ListView.View>
<GridView>
<GridViewColumn>
<GridViewColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding ImagePath}"
HorizontalAlignment="Left"
Stretch="Fill"
Height="100"
Width="100"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
}
这是解决此问题的最简单,最快捷的方法。如果你需要MVVM只需举手,我们就可以得到一个Command而不是那个Click事件。还有一件事,你有一个图像列表吗?如果是这样,我们将不得不使用ObservableCollection并实例化许多模型,以便为所有按钮提供信息。
ImageSource是我的程序集名称。
图片是我项目中创建的文件夹。
为了填充ListView,您需要public class Model : INotifyPropertyChanged
{
private Uri _ImagePath;
public Uri ImagePath
{
get
{
return _ImagePath;
}
set
{
_ImagePath = value;
PropertyChanged(this, new PropertyChangedEventArgs("ImagePath"));
}
}
public event PropertyChangedEventHandler PropertyChanged = delegate { };
定义如下:
public partial class MainWindow : Window
{
public Model ImageModel { get; set; }
public MainWindow()
{
InitializeComponent();
ImageModel = new Model();
ImageModel.ImagePath = new Uri(@"/ImageSource;component/Images/Image1.jpg", UriKind.RelativeOrAbsolute);
this.DataContext = ImageModel;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
ImageModel.ImagePath = new Uri(@"/ImageSource;component/Images/Image2.jpg", UriKind.RelativeOrAbsolute);
}
在构造函数中初始化它:
ObservableCollection<Model>
并向其添加一些Model实例,其图像路径设置如上所示。
答案 1 :(得分:2)
您缺少实际显示BitmapImage对象的DataTemplate:
<ListView Name="Thumbnails" ... >
...
<ListView.ItemTemplate>
<DataTemplate>
<Image Source="{Binding}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
如果没有DataTemplate,ListViewItem只显示数据项的ToString()
方法的输出。
然后(没有任何MVVM)显示文件夹中所有PNG文件的简单方法是:
Thumbnails.ItemsSource = Directory
.EnumerateFiles(@"C:\Peak Sourcing\Work\ppt_test\slides_png", "*.png")
.Select(f => new BitmapImage(new Uri(f)));
答案 2 :(得分:0)
您要将BitmapImage
添加为ListViewItem
,这不是可视的(因此不会呈现)并显示为ToString()
。
通常在这种情况下你应该使用DataTemplates
,但这也适用于你:
var fileName = @"C:\Peak Sourcing\Work\ppt_test\slides_png\slide1.png";
var bitmap = new BitmapImage(new Uri(fileName)) { /*.. more bitmap image options if you like .. */ };
var image = new Image() { Source = bitmap /*.. more image options ..*/ }
Thumbnails.Items.Add(image);