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解决了快速加载图片的问题,但还有一个问题悬 ...
随机推荐
- Asp.net mvc中的Ajax处理
在Asp.net MVC中的使用Ajax, 可以使用通用的Jquery提供的ajax方法,也可以使用MVC中的AjaxHelper. 这篇文章不对具体如何使用做详细说明,只对于在使用Ajax中的一些需 ...
- Effective Java 34 Emulate extensible enums with interfaces
Advantage Disadvantage Enum types Clarity Safety Ease of maintenance. None extensibility Typesafe en ...
- JavaScript Patterns 3.7 Primitive Wrappers
Primitive value types: number, string, boolean, null, and undefined. // a primitive number var n = 1 ...
- redis中set命令的源码分析
首先在源码中的redis.c文件中有一个结构体:redisCommand redisCommandTable[],这个结构体中定义了每个命令对应的函数,源码中的set命令对应的函数是setComman ...
- Python 元组知识点
1.元组是一个有序的集合,2.元组和列表一样可以使用索引.切片来取值.3.创建元组后不能在原地进行修改替换等操作.4.元组支持嵌套,可以包含列表.字典和不同元组.5.元组支持一般序列的操作,例如:+. ...
- redis 非集群的主从配置及切换
单纯的master-slave不能称之为集群,只能叫做读写分离.此案例只针对master为单点服务,且程序端写死master为可写,slave为只读.若master宕机则不可用,若主从未开启持久化,不 ...
- [嵌入式学习资料]ARM开发学习详解iTOP-4412开发板使用手册
拿到的最新4412开发板学习使用手册,完全免费,分享一下 下载地址:http://pan.baidu.com/s/1ntrJA8h
- Learning C Struct
为什么需要结构体类型? 一种语言本身往往会提供一些最基本的数据类型,比如数字型(int,bigint,float,double等),字符型,日期型,布尔型等.但现实世界中,我们面对的对象总是非常复常, ...
- Java语言中的基本词汇
1.标识符包.类.方法.参数和变量的名称.大小写字母.数字._和$符号的组合,不以数字开始,不能使关键字,不能包括分隔符和换行.(严格区分大小写,最大长度255个字符) 2.字面量 某种类型的值(具 ...
- NOIP2007 T1奖学金 解题报告-S.B.S.
洛谷P1093 题目描述 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金.期末,每个学生都有3门课的成绩:语文.数学.英语.先按总分从高到低排序,如果两个同学总分相同, ...