背景:#EDF0F5 #FAFBE6 #FFF2E2 #FDE6E0 #F3FFE1 #DAFAF3 #EAEAEF 默认  
阅读内容

在silverlight中使用IsolateStore隔离存储(上)

[日期:2008-07-06] 来源:  作者: [字体: ]
隔离存储(Isolate Store) 是一个虚拟的文件系统 . 它可用于保存本地(客户端文件)。下面是微软的一些解释:
   
    虚拟文件系统根目录对于每个机器当前登陆用户不同的, 它是一个隐藏的文件夹,存在于物理文件系统中. 每个
application的不同标识将会使其映射到不同的文件夹中, 也就是说,将分配给每个不同的application 一个属于它的
虚拟文件系统. .NET Framework version 2.0中的文件夹节构和隐藏架构同样在.NET Framework for Silverlight中
也用到了.    而在silverlight开发中,允许我们使用Isolate Store(位于System.IO.IsolatedStorage名空间),其下有几个
主要的类如:
    IsolatedStorageSettings (以Dictionary<<(TKey, TValue)>> 键值对的方式来存储数据,本文DEMO的演示内容)
    IsolatedStorageFile (返回一个包括路径和文件的虚拟区域, 用于管理目录,文件等, 会在下一篇中演示)
   
    IsolatedStorageFileStream (以流的方式读写指定路径的文件, 会在下一篇中演示)
   
   
    下面就先演示一下IsolatedStorageSettings的使用方法:
     
    假设我们有一个应用,它是一个本地邮件管理和发送程序(如OutLook等).而我们写完一封EMAIL时可能不会立即将   
其发送出去,而是还生成一个Draft(草稿,以便日后进行编辑),当我们认为可以发送时才会去SEND。
    下面就是这个应用的一个原型, 如下图:

   
   
    我们可以在输入了相关信息之后,先将其保存为草稿. 当我们下次再运行这个应用时,做自动加载当前的草稿, 以
便我们进行编辑操作.当工作完成之后,就可以将其发送到Server端. 如果认为内容不好,我们也可以从Isolate Store
区中将该项内容删除.
下面就是它的page.xaml代码: 

<Grid x:Name="LayoutRoot" Background="AliceBlue">
    <Grid.RowDefinitions>
        <RowDefinition  Height="40"/>
        <RowDefinition  Height="40"/>           
        <RowDefinition  Height="231"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="122" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>

    <TextBlock Grid.Row="0" Grid.Column="0"  Margin="5,5,57,5" Horiz>
    <Run Text="收件人:"/>
    </TextBlock>
    <TextBox x:Name="Recipient"  Width="200" Grid.Row="0" Grid.Column="1" Horiz Margin="5,5,0,5"/>

    <TextBlock Grid.Row="1" Grid.Column="0" Margin="5,5,57,5" Horiz>
    <Run Text="主 题:"/>
    </TextBlock>
    <TextBox x:Name="Subject"  Width="200" Grid.Row="1" Grid.Column="1" Horiz Margin="5,5,0,5"/>

    <TextBlock Grid.Row="2" Grid.Column="0" Margin="5,5,57,36" Horiz >
    <Run Text="内 容:"/>
    </TextBlock>
    <TextBox x:Name="Body" TextWrapping="Wrap"  Grid.Row="2" Grid.Column="1" Horiz Margin="5,5,8,5" Grid.RowSpan="1"/>
   
    <StackPanel Grid.ColumnSpan="2" Grid.Row="3" Orientation="Horizontal" Grid.Column="0" Horiz VerticalAlignment="Stretch" Margin="8,23.5,64,8">
        <Button x:Name="SaveToDraft" Margin="5,5,5,5" C Click="SaveToDraft_Click" />
        <Button x:Name="SaveToServer" Margin="5,5,5,5" C  Click="SaveToServer_Click"/>
        <Button x:Name="DeleteDraft" Margin="5,5,5,5" C Click="DeleteDraft_Click" />
    </StackPanel>
</Grid>

   
    而相应的page.xaml.cs(位于源码包中的IsolatedStore_Demo文件夹)代码如下:   
public partial class Page : UserControl
{
    private IsolatedStorageSettings appSettings =
        IsolatedStorageSettings.ApplicationSettings;//获取当前应用(silverlight Application) IsolatedStorageSettings  实例,范围在当前应用
    //IsolatedStorageSettings appSettings =
        //IsolatedStorageSettings.SiteSettings;//获取当前应用(silverlight Application) IsolatedStorageSettings  实例,范围在当前域

    public Page()
    {
        InitializeComponent();
        this.Loaded += new RoutedEventHandler(Page_Loaded);
    }

    void Page_Loaded(object sender, RoutedEventArgs e)
    {
        try
        {
            //加载相应节点信息,首次运行时会报为空的错误
            Recipient.Text = (string) appSettings["Recipient"];
            Subject.Text = (string)appSettings["Subject"];
            Body.Text = (string)appSettings["Body"];
        }
        catch (System.Collections.Generic.KeyNotFoundException ex)
        {
            HtmlPage.Window.Alert(ex.Message);
        }

    }

    private void SaveToDraft_Click(object sender, RoutedEventArgs e)
    {
        try
        {  //添加相应节点信息
            appSettings.Add("Recipient", Recipient.Text);
            appSettings.Add("Subject", Subject.Text);
            appSettings.Add("Body", Body.Text);
            HtmlPage.Window.Alert("已存入本地隔离存储区");
        }
        catch (ArgumentException ex)
        {
            HtmlPage.Window.Alert(ex.Message);
        }
    }

    private void DeleteDraft_Click(object sender, RoutedEventArgs e)
    {
        try
        {
            //移除相当节点信息
            appSettings.Remove("Recipient");
            appSettings.Remove("Subject");
            appSettings.Remove("Body");
            HtmlPage.Window.Alert("已从本地隔离存储区中删除该草稿");
        }
        catch (ArgumentException ex)
        {
            HtmlPage.Window.Alert(ex.Message);
        }

    }

    private void SaveToServer_Click(object sender, RoutedEventArgs e)
    {
        //创建EMAIL信息类,以此作为上传数据
        EmailInfo emailInfo = new EmailInfo()
        {
            Recipientk__BackingField = Recipient.Text,
            Subjectk__BackingField = Subject.Text,
            Bodyk__BackingField = Body.Text
        };

        EmailClient emailClient = new EmailClient();
        //调用WCF方法
        emailClient.AcceptCompleted += new EventHandler<AcceptCompletedEventArgs>(email_AcceptCompleted);
        emailClient.AcceptAsync(emailInfo);
    }

    void email_AcceptCompleted(object sender, AcceptCompletedEventArgs e)
    {
        if (e.Result)
        {
            HtmlPage.Window.Alert("上传成功");
        }
        else
        {
            HtmlPage.Window.Alert("上传失败");
        }
    }

}

 
    上面代码中就是将subject(主题),Recipient(收件人),Body(邮件内容)以键值对的方式存储在Isolate Store
虚拟存储区中.而相应的WCF服务这里只是一种象征性的发送,并无什么实质内容,它在调用成功后会将结果以Bool型传
递回来,以便进行接下来其它操作.

    好了,今天的内容就到这里了:)
12下一页  GO
阅读:
录入:dm

推荐 】 【 打印
相关新闻      
本文评论       全部评论
发表评论
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款


点评: 字数
姓名:
内容查询