posts - 283,  comments - 6275,  trackbacks - 107

 
     因为在Silverlight 2.0可以OpenFileDialog来访问本地文件,所以在Mike Taulty视频教程中也对这
个新特性进行了介绍,并做了一个简单的DEMO,如下所示(可以左右拖动调整图片宽度):

 

     而实现这个功能的代码开发只有仅仅14行,简单得不能再简单了.

  首先,我们先建立一个Silverlight Application, 然后将下面的xaml代码拷入到Page.xaml中:   

<Grid x:Name="LayoutRoot" Background="Black" ShowGridLines="False" Margin="8">
    
<Grid.ColumnDefinitions>
        
<ColumnDefinition Width="196" />
        
<ColumnDefinition Width="*" />
    
</Grid.ColumnDefinitions>
    
<Grid.RowDefinitions>
        
<RowDefinition Height="*" />
        
<RowDefinition Height="48" />
    
</Grid.RowDefinitions>
    
<ListBox  x:Name="myList" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
          ItemsSource
="{Binding}"
          Grid.Row
="0"
          Grid.Column
="0"
          Grid.RowSpan
="2"
          SelectionChanged
="OnSelectionChanged" >
        
<ListBox.ItemTemplate>
            
<DataTemplate>
                
<TextBlock Text="{Binding Name}" />
        
</DataTemplate>
        
</ListBox.ItemTemplate>
    
</ListBox>
    
    
<GridSplitter Width="1" HorizontalAlignment="Left" VerticalAlignment="Stretch" Grid.Column="1" />
    
    
<Image  x:Name="myImage" Grid.Column="1" />
    
<Button Grid.Row="1"
      Grid.Column
="1"
      Content
="选择图片"
      Margin
="8" Click="OnClick" FontSize="16" />
   
</Grid>


相应Page.xaml.cs文件的代码如下:

public partial class Page : UserControl
{
    
public Page()
    {
        InitializeComponent();
    }

  
//将选择图片按钮单击事件
    void OnClick(object sender, EventArgs args)
    {
        OpenFileDialog openFileDialog 
= new OpenFileDialog()
        {
            Filter 
= "Jpeg Files (*.jpg)|*.jpg|All Files(*.*)|*.*",
            EnableMultipleSelection 
= true
        };

        
if (openFileDialog.ShowDialog() == DialogResult.OK)
        {
//向ListBox控件加载图片列表数据
            myList.DataContext = openFileDialog.SelectedFiles;
        }
    }



    
private void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        
if ((e.AddedItems != null&& (e.AddedItems.Count > 0))
        {
            
//获取选取的图片信息
            FileDialogFileInfo fi = e.AddedItems[0as FileDialogFileInfo;

            
if (fi != null)
            {
                
using (Stream stream = fi.OpenRead())
                {  
  
//获取图片流信息并完成与Image控件的绑定
                    BitmapImage image = new BitmapImage();
                    image.SetSource(stream);
                    myImage.Source 
= image;
                    myImage.Visibility 
= Visibility.Visible;
                    stream.Close();
                }
            }
        }
    }
}


    代码很简单,大家看一下注释就可以了,总体感觉又回到了在学校时用delphi开发图片游览器的时候了:)

    源码下载链接请 点击这里

    有兴趣的朋友不妨在这个DEMO上再开发新的功能,如上传,图片格式转换什么的, 相信会有所收获的:)

posted on 2008-06-03 09:11 代震军 阅读(4888) 评论(11) 编辑 收藏

FeedBack:
2008-06-03 09:29 | 5yplan      
估计图上是小代,呵呵,很帅气呀~~
 回复 引用 查看   
2008-06-03 09:40 | 平静中的疯狂      
SL
 回复 引用 查看   
#3楼[楼主]
2008-06-03 10:02 | 代震军      
@5yplan
呵呵,谢谢夸奖:)

 回复 引用 查看   
#4楼[楼主]
2008-06-03 10:02 | 代震军      
@平静中的疯狂
晕:)

 回复 引用 查看   
2008-06-03 10:13 | Windie Chai(笑煞天)      
做图片上传会有不错的用户体验。
 回复 引用 查看   
2008-06-03 10:40 | Robert Lee      
Xceed发布了基于sl的Upload控件,感兴趣的话可以学习借鉴下:)
 回复 引用 查看   
#7楼[楼主]
2008-06-03 10:43 | 代震军      
@Windie Chai(笑煞天)
呵呵,有道理:)

 回复 引用 查看   
#8楼[楼主]
2008-06-03 10:43 | 代震军      
@Robert Lee
谢谢推荐:)

 回复 引用 查看   
2008-06-03 11:51 | 三千      
flash也能做,哈哈,不过就要比这代码多了。

 回复 引用 查看   
2008-06-03 12:04 | 求知无傲      
啥时候偶也有机会整一个类?期待。
 回复 引用 查看   
2010-06-12 00:24 | zeyoo      
文章很不错,先谢了。
不过要想在 Silverlight 4(Visual Studio 2010) 下运行,还需要将代码稍作修改,修改后的代码可以在这里下载 源代码下载。也可以看这篇补充文章 在 Silverlight 4 中使用 OpenFileDialog 浏览本地图片

 回复 引用 查看   
昵称:代震军
园龄:5年11个月
荣誉:推荐博客
粉丝:492
关注:3

<2008年6月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

搜索

 
 

常用链接

随笔分类(366)

随笔档案(283)

文章分类(8)

文章档案(31)

相册

JavaScript

LINQ

silverlight

UML,OO

WebBlogger

负载开源项目

  • Discuz!NT
  • LLServer
  • TokyoTyrantClient
  • WebCam

个人简历

漫画

其它

企业级架构

网站案例研究

积分与排名

  • 积分 - 1217876
  • 排名 - 26

最新评论

阅读排行榜

评论排行榜

推荐排行榜