急等,在wpf中怎么才能把image控件的source属性绑定到listview中的选中项
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了急等,在wpf中怎么才能把image控件的source属性绑定到listview中的选中项相关的知识,希望对你有一定的参考价值。
我有这么一个界面:左边是一堆图片的缩略图,右边一个image用来显示大图,想做的效果是点左边缩略图,image显示大图
<ListView x:Name="imgListView" ItemsSource="Binding" Margin="0,0,586,0">
<ListView.ItemTemplate>
<DataTemplate>
<Image x:Name="ItemImage" Width="100" Height="50" Source="Binding Path=imagePath"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
model和viewmodel都做好了,缩略图也显示出来了,就卡在这里
vs ajax里有个sliderShowentered控件。。。。是第三方空间。就是做这个效果的。你可以看看。。。
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:Label ID="Label1" runat="server" Text=""></asp:Label>
<asp:SlideShowExtender ID="SlideShowExtender1" runat="server"
NextButtonID="ImageButton2" PlayButtonID="ImageButton3"
TargetControlID="Image1" ImageDescriptionLabelID="Label2"
ImageTitleLabelID="Label1" Loop="True" PlayButtonText="自动播放"
PlayInterval="2000" PreviousButtonID="ImageButton1"
SlideShowServiceMethod="GetSlides" StopButtonText="停止自动播放">
</asp:SlideShowExtender>
<asp:Image ID="Image1" runat="server" />
<asp:Label ID="Label2" runat="server" Text=""></asp:Label>
<hr />
<div id="div1">
<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/img/LAST.JPG" />
<asp:ImageButton ID="ImageButton2" runat="server" ImageUrl="~/img/NEXT.JPG" />
<asp:ImageButton ID="ImageButton3" runat="server" ImageUrl="~/img/PALY.JPG" />
</div>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"></asp:SqlDataSource>
</ContentTemplate>
</asp:UpdatePanel>
参考技术A 以下建议仅供参考:
1.采用主从绑定。但是感觉不是太适合
2.给listview添加处理事件,在事件中处理大图显示
3.既然要采用MVVM模式,那么你需要给listview绑定一个命令,在命令中处理大图的显示
补充下:
你代码中关于iamge绑定源那部分是不是有点问题?本回答被提问者采纳
关于WPF中Image控件不释放内存的问题
我最初目的是想在wpf中播放带有透明通道的视频,但MediaElement控件不支持透明通道视频播放(依然是黑色背景),测试Image控件是能够播放带透明通道PNG图片的,故采用image控件不停加载PNG序列帧图片的方式来实现播放透明背景的视频。
程序已经写好,测试成功且效果不错,只是内存占用率让人无法接受。400张序列帧图片,所有图片加起来总大小170M,程序运行以后内存使用超过2G!实现方法是先把图存放在一个BitmapImage对象数组中,然后依次给image的.Source赋值。关键代码如下:(使用语言无所谓,C# or vb.net)
dim bmp() As BitmapImage
dim ImageRQ As New Image
dim img As ImageSource
(1)把图片弄到内存里
ReDim bmp(PngMaxName - PngMinName + 1)
For i = PngMinName To PngMaxName
bmp(i) = New BitmapImage(New Uri(PngPath + QM + Trim(Str(i)) + ".jpg", UriKind.RelativeOrAbsolute))
Next i
经过测试以后保存图片部分并不占用更多的内存,占用的只是原图片大小的内存。
(2)用image依次显示这些图
Private Sub Timer1_Tick() Handles Timer1.Tick 时钟频率每秒播30张图
aaa= aaa + 1
img = (bmp(aaa))
ImageRQ.Source = img
End Sub
经测试
ImageRQ.Source = img一句没有加之前内存均正常。只要一显示,随着播放过程的推移内存使用率逐渐增大,直到内存使用率98%
疑点:只有一个image对象,当 ImageRQ.Source = img有新值的时候应该释放掉前一个图片的显示内存,但实际并非如此。
以上问题求解
先把图片缓存成二进制,这样可以释放对图片文件资源的占用,后面代码执行效率高;用通过MemoryStream生成的Source,用完就被释放了。
参考以下代码:
byte[] FacePicture = BitmapImageToByteArray(img)//图片转成数组的方法网上有很多,自己找下吧。
ImageSourceConverter imageSourceConverter = new ImageSourceConverter();
MemoryStream stream = new MemoryStream(FacePicture);
BitmapFrame source = imageSourceConverter.ConvertFrom(stream) as BitmapFrame;
bitmap.Dispose();
ImageRQ.Source = source;
多张图片,自己做个循环吧! 参考技术B 我怀疑是电脑处理速度不够,在那么短时间内没能及时回收。
我刚才试了,10150张图片不卡,不阻塞。我得是台式i5,显卡也可以。 参考技术C XP系统回收比较慢,win7就好很多 参考技术D 在结束后调用GC.Collect()试试
以上是关于急等,在wpf中怎么才能把image控件的source属性绑定到listview中的选中项的主要内容,如果未能解决你的问题,请参考以下文章
WPF的控件没有句柄,但是有啥其他间接方法获得WPF控件的句柄啊。
WPF的控件没有句柄,但是有啥其他间接方法获得WPF控件的句柄啊。