silverlight ListBox 多列图片效果
这个功能之前用wpf写过一次这次用Silverlight写一次
这两种写法上基本上没有太大的差别
这个Demo并不完美,只是给大家提供一个思路
源码:SilverLightListPricture.rar
看一下效果

思路是:
修改ItemTemplate样式
ItemsPanelTemplate 用WrapPanel显示
先为image绑定图片添加一个转换类
using System;
using System.IO;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Media.Imaging;
using System.Windows.Shapes; namespace SilverLightListPricture
{
public class ConvertToRecipesImageInfo : IValueConverter
{ public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{ Stream _stream = value as Stream;
BitmapImage bitmap = new BitmapImage();
bitmap.SetSource(_stream);
return bitmap; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
我先把前端代码分解一下最后给出全部代码
先看一下是怎么修改listbox的ItemTemplate
是用一个image和一个*button做删除
<DataTemplate x:Key="ItemTemplate">
<Grid Width="" Height="" >
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions> <Border BorderThickness="" BorderBrush="SteelBlue" CornerRadius="">
<Grid Margin="">
<Grid.RowDefinitions>
<RowDefinition Height=""></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Image Grid.Row="" Source="{Binding Path=streamsInfo,Converter={StaticResource ImageConverter}}" Margin="" ></Image>
<StackPanel Grid.Row="" HorizontalAlignment="Right" >
<Button Width="" BorderThickness="" Background="Transparent" Click="Del_PrictureEvent" Name="btn_Del" Tag="{Binding Path=activePricture}" Style="{StaticResource CloseButton}" >
</Button>
</StackPanel>
</Grid>
</Border>
</Grid>
</DataTemplate>
button的样式
<Style x:Key="CloseButton" TargetType="Button">
<Setter Property="IsTabStop" Value="False"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Background="Transparent">
<Canvas>
<Line X1="" Y1="" X2="" Y2="" Stroke="#9FA1A0" StrokeThickness=""></Line>
<Line X1="" Y1="" X2="" Y2="" Stroke="#9FA1A0" StrokeThickness=""></Line>
</Canvas>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
listbox用的时候要把它的ItemsPanelTemplate改用WrapPanel
重要的是ScrollViewer.HorizontalScrollBarVisibility是定要为Disabled这样就能防止wrapPanel横向滚动条出现
<ListBox Grid.Row="" Margin="" Width="" Name="lsPricture" ScrollViewer.VerticalScrollBarVisibility="Visible" ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ItemTemplate="{StaticResource ItemTemplate}">
<ListBox.ItemsPanel>
<ItemsPanelTemplate> <tools:WrapPanel Width="Auto" Background="#F3FFFF" >
</tools:WrapPanel> </ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
完整的前台代码
<UserControl x:Class="SilverLightListPricture.ListBoxPrictueDEMO"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
xmlns:convertImage="clr-namespace:SilverLightListPricture"
xmlns:tools="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit"> <UserControl.Resources>
<convertImage:ConvertToRecipesImageInfo x:Key="ImageConverter"/>
<!--关闭按钮样式-->
<Style x:Key="CloseButton" TargetType="Button">
<Setter Property="IsTabStop" Value="False"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Background="Transparent">
<Canvas>
<Line X1="" Y1="" X2="" Y2="" Stroke="#9FA1A0" StrokeThickness=""></Line>
<Line X1="" Y1="" X2="" Y2="" Stroke="#9FA1A0" StrokeThickness=""></Line>
</Canvas>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<DataTemplate x:Key="ItemTemplate">
<Grid Width="" Height="" >
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions> <Border BorderThickness="" BorderBrush="SteelBlue" CornerRadius="">
<Grid Margin="">
<Grid.RowDefinitions>
<RowDefinition Height=""></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Image Grid.Row="" Source="{Binding Path=streamsInfo,Converter={StaticResource ImageConverter}}" Margin="" ></Image>
<StackPanel Grid.Row="" HorizontalAlignment="Right" >
<Button Width="" BorderThickness="" Background="Transparent" Click="Del_PrictureEvent" Name="btn_Del" Tag="{Binding Path=activePricture}" Style="{StaticResource CloseButton}" >
</Button>
</StackPanel>
</Grid>
</Border>
</Grid>
</DataTemplate>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="White">
<Grid.RowDefinitions>
<RowDefinition Height=""></RowDefinition>
<RowDefinition Height=""></RowDefinition>
</Grid.RowDefinitions>
<ListBox Grid.Row="" Margin="" Width="" Name="lsPricture" ScrollViewer.VerticalScrollBarVisibility="Visible" ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ItemTemplate="{StaticResource ItemTemplate}">
<ListBox.ItemsPanel>
<ItemsPanelTemplate> <tools:WrapPanel Width="Auto" Background="#F3FFFF" >
</tools:WrapPanel> </ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox> <StackPanel Grid.Row="" VerticalAlignment="Center" HorizontalAlignment="Center" Orientation="Horizontal">
<Button Content="添加 " Width="" Click="btn_AddEvent"></Button>
</StackPanel>
</Grid>
</UserControl>
后台代码
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes; namespace SilverLightListPricture
{
public partial class ListBoxPrictueDEMO : UserControl
{
ObservableCollection<ImageInfo> SourceCollection = new ObservableCollection<ImageInfo>();
public ListBoxPrictueDEMO()
{
InitializeComponent();
bindSource();
}
//删除
public void Del_PrictureEvent(object sender, RoutedEventArgs e)
{ }
void bindSource()
{
lsPricture.ItemsSource = SourceCollection;
} public void btn_AddEvent(object sender, RoutedEventArgs e)
{ OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "图片文件(*.jpg,*.png,*.bmp)|*.jpg;*.png;*.bmp|All Files (*.*)|*.*";
if (openFileDialog.ShowDialog() == true)
{
FileInfo file = openFileDialog.File; Stream stream = file.OpenRead(); SourceCollection.Add(new ImageInfo { streamsInfo = stream, activePricture = "tag" }); }
}
} public class ImageInfo
{
public string activePricture
{
get;
set;
}
public Stream streamsInfo
{
get;
set;
}
}
}
好了就说到这
源码:SilverLightListPricture.rar
silverlight ListBox 多列图片效果的更多相关文章
- NOPI导出execl 多个sheet,一列图片
NPOI API: http://www.cnblogs.com/atao/archive/2009/11/15/1603528.html http://blog.csdn.net/pan_junbi ...
- javascript设计模式实践之职责链--具有百叶窗切换图片效果的JQuery插件(三)
在上一篇<javascript设计模式实践之模板方法--具有百叶窗切换图片效果的JQuery插件(二)>里,通过采用模板方法模式完成了切换效果对象的构建编写. 接下来就是完成各效果对象的调 ...
- javascript设计模式实践之模板方法--具有百叶窗切换图片效果的JQuery插件(二)
在上一篇<javascript设计模式实践之迭代器--具有百叶窗切换图片效果的JQuery插件(一)>里,通过采用迭代器模式完成了各初始化函数的定义和调用. 接下来就要完成各个切换效果的编 ...
- javascript设计模式实践之迭代器--具有百叶窗切换图片效果的JQuery插件(一)
类似于幻灯片的切换效果,有时需要在网页中完成一些图片的自动切换效果,比如广告,宣传,产品介绍之类的,那么单纯的切就没意思了,需要在切换的时候通过一些效果使得切换生动些. 比较常用之一的就是窗帘切换了. ...
- JQuery 表格拖动调整列宽效果
类似于桌面程序中的表格拖动表头的效果,当鼠标停留在表头边框线上时,鼠标会变成表示左右拖动的形状,接着拖动鼠标,会在表格中出现一条随鼠标移动的竖线,最后放开鼠标,表格列宽会被调整.最近比较空闲,便自己动 ...
- js矩阵菜单或3D立体预览图片效果
js矩阵菜单或3D立体预览图片效果 下载地址: http://files.cnblogs.com/elves/js%E7%9F%A9%E9%98%B5%E8%8F%9C%E5%8D%95%E6%88% ...
- ArcGIS API for Silverlight之配准JPG图片地图文字倾斜解决方案
原文:ArcGIS API for Silverlight之配准JPG图片地图文字倾斜解决方案 根据实际JPG图片进行配准后,发布的地图,利用ArcGIS API for Silverlight在网页 ...
- Android 使用ContentProvider扫描手机中的图片,仿微信显示本地图片效果
版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/1873 ...
- Android Glide加载图片时转换为圆形、圆角、毛玻璃等图片效果
Android Glide加载图片时转换为圆形.圆角.毛玻璃等图片效果 附录1简单介绍了Android开源的图片加载框架.在实际的开发中,虽然Glide解决了快速加载图片的问题,但还有一个问题悬 ...
随机推荐
- cocos2d-x之物理引擎之碰撞监测
#include "HelloWorldScene.h" USING_NS_CC; #define RED_BIT_MASK 0b0100 #define GREEN_BIT ...
- javascript 特效实现(2)——回到顶部效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- ExtJS之开篇:我来了
以前做web开发一直在用jquery框架,或者开发html5用到backbone.js+sea.js+underscore.js等,现在做网站后台要用到extjs了,结合spring mvc,正式学习 ...
- 2.NopCommerce中文语言包
由于NopCommerce是纯英语环境,给英语不好的管理人员带来诸多不便. NopCommerce支持多语言环境,所以我们只要安装中文语言包,让NopCommerce支持后台中文操作环境. 首先先下载 ...
- Redis和Memcache的关系
转自: http://blog.163.com/sun_jian_zhang/blog/static/187804041201310795917333/ 1. Redis中,并不是所有的数据都一直存储 ...
- (转)u3d设计模式
Unity3d中UI开发的MVC模式 ,和游戏开发的其他模块类似,UI一般需要通过多次迭代开发,直到用户体验近似OK.另外至关重要的是, 我们想尽快加速迭代的过程.使用MVC模式来进行设计,已经被业界 ...
- java截取日期范围并计算相差月数
前两天,媳妇单位让整理excel的某一个单元格内两个日期范围的相差月数,本人对excel操作不是很熟练,便写了个小程序计算了一下,原始需求如下: 计算投资期限的范围,并得到期限范围的相差月数 思路1: ...
- 读《深入理解Java虚拟机》有感——第二部分:虚拟机类加载机制
一.类加载过程 执行时机:编译程序——>执行程序(JVM启动.程序运行),类加载发生在程序运行期间 各个阶段:分为加载阶段.连接阶段(验证.准备.解析).初始化.使用.卸 ...
- jquery 实现邮箱输入自动提示功能:(二)
上篇文章写到了一个不错的jquery实现邮箱输入自动提示功能,发现还有一个不错的自动提示插件: 先展示结果如图: html代码: <center> <h1>输入邮箱试试!< ...
- RMQ之ST算法模板
#include<stdio.h> #include<string.h> #include<iostream> using namespace std; ; ],M ...