最近做一个项目,需要用户自行添加图片到一个控件中,此控件需要横排,如果图片过多需要显示横向滚动条,并且当用户选择一张图片时可以调整图片在控件中的顺序,比如向左移动,向右移动,移动到最前,移动到最后和删除此图片。
  有没有哪位做过类似的?或者给个思路。
  

解决方案 »

  1.   

    我的思路是这样的:首先定义一个横向显示的ListBox,用ListBox来显示图片
    <!--Resources-->
    <!--横向显示的ItemsPanel模板-->
        <ItemsPanelTemplate x:Key="HorizontalTemplate">
           <StackPanel Orientation="Horizontal" />
        </ItemsPanelTemplate><!--ListBox的DataTemplate模板-->
        <DataTemplate x:Key="picDataTemplate">
           <Image Source="{Binding imgSrc}" Height="48"/>
        </DataTemplate>
    <!--Resources-->...
    ...
    <ListBox ItemsSource="{Binding Pics}" ScrollViewer.VerticalScrollBarVisibility="Hidden"  ItemsPanel="{StaticResource HorizontalTemplate}"  ItemTemplate="{StaticResource picDataTemplate}"/>这样图片就能够显示了,而且有水平滚动条,剩下的移动和删除就是对数据源进行操作了,定义几个按钮,在按钮的Command中对ItemsSource绑定的集合Pics进行操作,完成后通知页面更改,应该就可以实现了这里我假定绑定的实体List<Model>中有imgSrc属性,是显示图片的地址;如果用过MVVM就知道,更改List后,viewModel一般都实现INotifyPropertyChanged接口,修改后需要使用RaisePropertyChanged通知页面更改
      

  2.   

    我刚接触wpf 我用上边的方法试了一下listbox中加不上图片,能不能给个完整的代码??
      

  3.   

    我还有一个问题 当点击动态添加的图片时需要在窗口中显示给图的大图,我再摸版中添加了一个事件
    MouseLeftButtonDown="Image_MouseLeftButtonDown"
    然后再后台事件处理中添加
    Image im = (Image)e.Source;string imUrl = im.Source.ToString();
    BitmapImage imgurl = new BitmapImage();
    imgurl.BeginInit();
    imgurl.UriSource = new Uri(imUrl, UriKind.Absolute);
    imgurl.EndInit();PPT_Build pptb = new PPT_Build();//PPT_Build是动态显示图片的窗口
    pptb.imgShow1.Source = imgurl;为什么我给该窗口的imgShow1副职没反应呢?????
      

  4.   

    我只是提供一个思路,而且肯定是可以实现的,我上面也只是View界面部分的代码,你还需要自己定义Model,和ViewModel,然后设置窗体或根布局的DataContext为该ViewModel实例,这样我的绑定才能生效,我习惯使用MVVM了,所以没有提供CodeBehind方式,两种方式原理都一样,关键要弄懂wpf的数据绑定和模板用法
      

  5.   

    关于后面一个问题,我觉得可以这样,开始的时候全部显示缩略图,当MouseOver或选中的时候显示全图,也就是大图,可以使用RenderTransform来实现图片放大和缩小,不用另外写CodeBehind代码如果你想在另外一个单独的Image控件中显示选中的图片,就更简单了,通过绑定listBox的SelectedItem就可以实现了<Image Source="{Binding SelectedItem.imgSrc,Element=listboxName,Mode=OneWay}">
      

  6.   

    好了 显示大图的解决了 刚开始我把模板加到了 app文件中了 所以不能显示大图 现在我放到窗体里了