这个功能之前用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="200" Height="210" > <Grid.ColumnDefinitions> <ColumnDefinition></ColumnDefinition> </Grid.ColumnDefinitions> <Border BorderThickness="1" BorderBrush="SteelBlue" CornerRadius="3"> <Grid Margin="0"> <Grid.RowDefinitions> <RowDefinition Height="185"></RowDefinition> <RowDefinition></RowDefinition> </Grid.RowDefinitions> <Image Grid.Row="0" Source="{Binding Path=streamsInfo,Converter={StaticResource ImageConverter}}" Margin="0" ></Image> <StackPanel Grid.Row="1" HorizontalAlignment="Right" > <Button Width="20" BorderThickness="0" 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="4" Y1="4" X2="11" Y2="11" Stroke="#9FA1A0" StrokeThickness="2"></Line> <Line X1="11" Y1="4" X2="4" Y2="11" Stroke="#9FA1A0" StrokeThickness="2"></Line> </Canvas> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style>
listbox用的时候要把它的ItemsPanelTemplate改用WrapPanel
重要的是ScrollViewer.HorizontalScrollBarVisibility是定要为Disabled这样就能防止wrapPanel横向滚动条出现
<ListBox Grid.Row="0" Margin="5" Width="640" 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="4" Y1="4" X2="11" Y2="11" Stroke="#9FA1A0" StrokeThickness="2"></Line> <Line X1="11" Y1="4" X2="4" Y2="11" Stroke="#9FA1A0" StrokeThickness="2"></Line> </Canvas> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style> <DataTemplate x:Key="ItemTemplate"> <Grid Width="200" Height="210" > <Grid.ColumnDefinitions> <ColumnDefinition></ColumnDefinition> </Grid.ColumnDefinitions> <Border BorderThickness="1" BorderBrush="SteelBlue" CornerRadius="3"> <Grid Margin="0"> <Grid.RowDefinitions> <RowDefinition Height="185"></RowDefinition> <RowDefinition></RowDefinition> </Grid.RowDefinitions> <Image Grid.Row="0" Source="{Binding Path=streamsInfo,Converter={StaticResource ImageConverter}}" Margin="0" ></Image> <StackPanel Grid.Row="1" HorizontalAlignment="Right" > <Button Width="20" BorderThickness="0" 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="600"></RowDefinition> <RowDefinition Height="73"></RowDefinition> </Grid.RowDefinitions> <ListBox Grid.Row="0" Margin="5" Width="640" 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="1" VerticalAlignment="Center" HorizontalAlignment="Center" Orientation="Horizontal"> <Button Content="添加 " Width="120" 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
本文转自lpxxn博客园博客,原文链接:http://www.cnblogs.com/li-peng/p/3408357.html,如需转载请自行联系原作者