• Windows Phone 7项目实战之记事本(二)


      Windows Phone 7记事本的第二部分讲解记事本的基本功能。

      

      功能点: 

      1.添加日记功能

      2.修改日记功能

      3.删除日记功能

      4.简单帮助功能

      5.显示已写日记列表功能

      一、显示已写日记列表功能

      1.新建Note类,包含日记文件的相关信息,供我们做数据绑定使用。如下

         public class Note
          {

          //文件创建日期
              public string DateCreated { get; set; }

          //文件全名(包含日期)
              public string FileFullName { get; set; }

          //我们命名的文件名
              public string FileName { get; set; }
          }

      2.修改MainPage页面

      首先我们在MainPage页面中添加如下XAML标记,以显示已写日记列表。

           <ListBox HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
                         x:Name="noteListBox">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <HyperlinkButton x:Name="noteLocation"
                                                 FontSize="32"
                                                 Content="{Binding FileName}"
                                                 Tag="{Binding FileFullName}"
                                                 Click="noteLocation_Click">
                                </HyperlinkButton>
                                <TextBlock Name="noteDateCreated"
                                           Text="{Binding DateCreated}"
                                           Margin="10">
                                </TextBlock>
                            </StackPanel>

                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

      说明:我们定义一个ListBox对象,用来显示已写日记列表,在它的模板中,我们包含了一个HyperlinkButton和一个TextBlock对象,其中HyperlinkButton对象用来显示我们日记的名称,它的Tag绑定了Note对象的FileFullName属性,Content属性绑定了Note对象的FileName属性,通过点击它可以导航到编辑日记界面,这样我们就可以编辑我们的日记了。TextBlock对象用来显示我们创建日记的日期,Text属性绑定了Note对象的DateCreated属性。下面我们看一下HyperlinkButton的noteLocation_Click事件。
     

         private void noteLocation_Click(object sender, RoutedEventArgs e)
            {
                HyperlinkButton clickedLink = (HyperlinkButton)sender;

          //将clickedLink的Tag值传到ViewEdit.xaml页面中。            
                string uri = string.Format("/XapNote;component/ViewEdit.xaml?id={0}", clickedLink.Tag);

                NavigationService.Navigate(new Uri(uri, UriKind.Relative));
            }

     

        private void bindList()
            {
                var appStorage = IsolatedStorageFile.GetUserStoreForApplication();
                List<Note> notes = new List<Note>();
               
                string[] fileList = appStorage.GetFileNames();

                foreach (var file in fileList)
                {
                    if (file != "__ApplicationSettings")
                    {
                        //2010_12_30_14_02_01_ddd.txt  文件全名的格式,2010_12_30_14_02_01是创建日记的日期,ddd是我们命名的日记名。下面就是从文件全名中截取信息
                        string fileFullName = file;

                        string year = file.Substring(0, 4);
                        string month = file.Substring(5, 2);
                        string day = file.Substring(8, 2);
                        string hour = file.Substring(11, 2);
                        string minute = file.Substring(14, 2);
                        string second = file.Substring(17, 2);
                        DateTime dateTime = new DateTime(int.Parse(year), int.Parse(month), int.Parse(day), int.Parse(hour), int.Parse(minute), int.Parse(second));
                        string dateCreated = dateTime.ToString("yyyy年MM月dd日 HH:MM:ss");
                        string fileName = file.Substring(20);

                        fileName = fileName.Substring(0, fileName.Length - 4);

                        notes.Add(new Note() { FileFullName = fileFullName, DateCreated = dateCreated, FileName = fileName });
                    }
                }

                noteListBox.ItemsSource = notes;
            }

      说明:由于我们写的日记保存在独立存储空间内,所以我们首先获取程序的IsolatedStorageFile对象,通过 appStorage.GetFileNames()方法我们可以获得程序的独立存储空间中的所有文件,这些文件中包含一个系统自带的设置文件"__ApplicationSettings"所以将其排除,然后从文件中截取字符串来获取日期,和我们定义的文件名,以供我们使用,然后将截取到的信息保存在Note对象中,来绑定数据到ListBox对象。在PhoneApplicationPage_Loaded方法中调用此方法。

      二、简单帮助功能

      1.修改MainPage页面

      在xaml文件添加如下标记

         <Canvas Name="helpCanvas"
                        HorizontalAlignment="Stretch"
                        VerticalAlignment="Stretch"
                        Width="400"
                        Height="400"
                        Background="White"
                        Visibility="Collapsed">

                    <ScrollViewer Name="helpScrollViewer"
                                  Width="400"
                                  Height="300"
                                  Canvas.Left="0"
                                  Canvas.Top="100">
                        <TextBlock Name="helpTextBlock" Foreground="Black" FontSize="24" Height="500" TextWrapping="Wrap">
                            这个记事本允许你写简单的日记,并且将其保存,显示你创建日记的日期和地点。
                            <LineBreak></LineBreak>
                            <LineBreak></LineBreak>
                            点击日记名称,可以打开并编辑该日记。
                            <LineBreak></LineBreak>
                            <LineBreak></LineBreak>
                            点击应用程序下面的添加图标可以写日记。
                            <LineBreak></LineBreak></TextBlock>
                    </ScrollViewer>
                    <TextBlock TextAlignment="Center" Foreground="Black" Canvas.Left="0" Canvas.Top="10" Height="30" Text="帮助" Width="59" />
                    <Button x:Name="btnClose"
                            Click="btnClose_Click"
                            Width="50"
                            Height="50"
                            Canvas.Left="350"
                            Canvas.Top="0">
                        <Button.Background>
                            <ImageBrush ImageSource="/Images/appbar.close.rest.png" Stretch="None" />
                        </Button.Background>
                    </Button>
                </Canvas>

        ......

         <phone:PhoneApplicationPage.ApplicationBar>
            <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">
                <shell:ApplicationBarIconButton IconUri="/Images/appbar.add.rest.png" Text="添加"  Click="Appbar_Add_Click"/>
                <shell:ApplicationBarIconButton IconUri="/Images/appbar.questionmark.rest.png" Text="帮助" Click="Appbar_Help_Click"/>
            </shell:ApplicationBar>
        </phone:PhoneApplicationPage.ApplicationBar>

      说明:我们首先定义一个Canvas对象,初始化设置为隐藏Visibility="Collapsed",当点击MainPage页面中的帮助图标时它将显示,它里面包含了ScrollViewer对象,此对象中的TextBlock用来显示帮助信息。还有一个Button,当点击它的时候此Canvas对象隐藏。由于此功能只是Canvas对象显示与隐藏的特点,所以不再赘述,有兴趣的朋友可以下载我的代码,自己看看。

      完整MainPage.xaml文件代码如下:

    <phone:PhoneApplicationPage
        x:Class="XapNote.MainPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
        xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="696"
        FontFamily="{StaticResource PhoneFontFamilyNormal}"
        FontSize="{StaticResource PhoneFontSizeNormal}"
        Foreground="{StaticResource PhoneForegroundBrush}"
        SupportedOrientations="PortraitOrLandscape" Orientation="Portrait"
        shell:SystemTray.IsVisible="True" Loaded="PhoneApplicationPage_Loaded">

        <!--LayoutRoot is the root grid where all page content is placed-->
        <Grid x:Name="LayoutRoot" Background="Transparent">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>

            <!--TitlePanel contains the name of the application and page title-->
            <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
                <TextBlock x:Name="ApplicationTitle" Text="记事本" Style="{StaticResource PhoneTextNormalStyle}" FontSize="30" />
                <TextBlock x:Name="PageTitle" Text="我的日记" Margin="9,-7,0,0" TextAlignment="Center" FontSize="22"/>
            </StackPanel>

            <!--ContentPanel - place additional content here-->
            <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
                <ListBox HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
                         x:Name="noteListBox">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <HyperlinkButton x:Name="noteLocation"
                                                 FontSize="32"
                                                 Content="{Binding FileName}"
                                                 Tag="{Binding FileFullName}"
                                                 Click="noteLocation_Click">
                                </HyperlinkButton>
                                <TextBlock Name="noteDateCreated"
                                           Text="{Binding DateCreated}"
                                           Margin="10">
                                </TextBlock>
                            </StackPanel>

                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

                <Canvas Name="helpCanvas"
                        HorizontalAlignment="Stretch"
                        VerticalAlignment="Stretch"
                        Width="400"
                        Height="400"
                        Background="White"
                        Visibility="Collapsed">

                    <ScrollViewer Name="helpScrollViewer"
                                  Width="400"
                                  Height="300"
                                  Canvas.Left="0"
                                  Canvas.Top="100">
                        <TextBlock Name="helpTextBlock" Foreground="Black" FontSize="24" Height="500" TextWrapping="Wrap">
                            这个记事本允许你写简单的日记,并且将其保存,显示你创建日记的日期和地点。
                            <LineBreak></LineBreak>
                            <LineBreak></LineBreak>
                            点击日记名称,可以打开并编辑该日记。
                            <LineBreak></LineBreak>
                            <LineBreak></LineBreak>
                            点击应用程序下面的添加图标可以写日记。
                            <LineBreak></LineBreak></TextBlock>
                    </ScrollViewer>
                    <TextBlock TextAlignment="Center" Foreground="Black" Canvas.Left="0" Canvas.Top="10" Height="30" Text="帮助" Width="59" />
                    <Button x:Name="btnClose"
                            Click="btnClose_Click"
                            Width="50"
                            Height="50"
                            Canvas.Left="350"
                            Canvas.Top="0">
                        <Button.Background>
                            <ImageBrush ImageSource="/Images/appbar.close.rest.png" Stretch="None" />
                        </Button.Background>
                    </Button>
                </Canvas>
            </Grid>
        </Grid>

        <!--Sample code showing usage of ApplicationBar-->
        <phone:PhoneApplicationPage.ApplicationBar>
            <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">
                <shell:ApplicationBarIconButton IconUri="/Images/appbar.add.rest.png" Text="添加"  Click="Appbar_Add_Click"/>
                <shell:ApplicationBarIconButton IconUri="/Images/appbar.questionmark.rest.png" Text="帮助" Click="Appbar_Help_Click"/>
            </shell:ApplicationBar>
        </phone:PhoneApplicationPage.ApplicationBar>

    </phone:PhoneApplicationPage>

    完整MainPage.cs代码如下:

     public partial class MainPage : PhoneApplicationPage
        {
            #region 构造器

            public MainPage()
            {
                InitializeComponent();
            }

            #endregion

            #region Appbar 事件

            #region 添加事件

            private void Appbar_Add_Click(object sender, EventArgs e)
            {
                NavigationService.Navigate(new Uri("/XapNote;component/Add.xaml", UriKind.Relative));

                #region 注销掉(测试用)
                /*
                               //0123456789012345678901234567890123456789  
                string fileName="2010_12_29_13_43_01_Woo_Gankyang-CHN.txt";
                string fileContent = "我的日记";

                var appStorage = IsolatedStorageFile.GetUserStoreForApplication();

                if (!appStorage.FileExists(fileName))
                {
                    using (var file = appStorage.CreateFile(fileName))
                    {
                        using (var writer = new StreamWriter(file))
                        {
                            writer.WriteLine(fileContent);
                        }
                    }
                }

                bindList();
                 * */

                #endregion
            }

            #endregion

            #region 帮助事件

            private void Appbar_Help_Click(object sender, EventArgs e)
            {
                this.helpCanvas.Visibility = Visibility.Visible;
            }

            #endregion

            #endregion

            #region 程序加载事件

            private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
            {
                IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;
                string state = "";

                if (settings.Contains("state"))
                {
                    if (settings.TryGetValue<string>("state", out state))
                    {
                        if (state == "add")
                        {
                            NavigationService.Navigate(new Uri("/Add.xaml", UriKind.Relative));
                        }

                        else if (state == "edit")
                        {
                            NavigationService.Navigate(new Uri("/ViewEdit.xaml", UriKind.Relative));
                        }
                    }
                }

                bindList();
            }

            #endregion

            #region ListBox绑定数据

            private void bindList()
            {
                var appStorage = IsolatedStorageFile.GetUserStoreForApplication();
                List<Note> notes = new List<Note>();
               
                string[] fileList = appStorage.GetFileNames();

                foreach (var file in fileList)
                {
                    if (file != "__ApplicationSettings")
                    {
                        //2010_12_30_14_02_01_ddd.txt
                        string fileFullName = file;

                        string year = file.Substring(0, 4);
                        string month = file.Substring(5, 2);
                        string day = file.Substring(8, 2);
                        string hour = file.Substring(11, 2);
                        string minute = file.Substring(14, 2);
                        string second = file.Substring(17, 2);
                        DateTime dateTime = new DateTime(int.Parse(year), int.Parse(month), int.Parse(day), int.Parse(hour), int.Parse(minute), int.Parse(second));
                        string dateCreated = dateTime.ToString("yyyy年MM月dd日 HH:MM:ss");
                        string fileName = file.Substring(20);

                        fileName = fileName.Substring(0, fileName.Length - 4);

                        notes.Add(new Note() { FileFullName = fileFullName, DateCreated = dateCreated, FileName = fileName });
                    }
                }

                noteListBox.ItemsSource = notes;
            }

            #endregion

            #region HyperlinkButton事件

            private void noteLocation_Click(object sender, RoutedEventArgs e)
            {
                HyperlinkButton clickedLink = (HyperlinkButton)sender;
                string uri = string.Format("/XapNote;component/ViewEdit.xaml?id={0}", clickedLink.Tag);

                NavigationService.Navigate(new Uri(uri, UriKind.Relative));
            }

            #endregion

            #region 关闭帮助事件

            private void btnClose_Click(object sender, RoutedEventArgs e)
            {
                this.helpCanvas.Visibility = Visibility.Collapsed;
            }

            #endregion
        }

      二、添加日记功能

      1.Appbar_Add_Click事件,导航到Add.xaml页面

        private void Appbar_Add_Click(object sender, EventArgs e)
            {
                NavigationService.Navigate(new Uri("/XapNote;component/Add.xaml", UriKind.Relative));

         }

      2.Add.xaml页面

     

     <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
                <TextBlock  Name="displayTextBlock"
                            HorizontalAlignment="Stretch"
                            VerticalAlignment="Stretch"
                            Visibility="Collapsed">
                </TextBlock>
                <TextBox Name="editTextBox"
                         HorizontalAlignment="Stretch"
                         VerticalAlignment="Stretch"
                         TextChanged="editTextBox_TextChanged">
                </TextBox>
                <Canvas Name="namedDialog"
                        HorizontalAlignment="Left"
                        VerticalAlignment="Top"
                        Background="Red"
                        Margin="59,6,0,0"
                        Width="350"
                        Height="300"
                        Visibility="Collapsed">
                    <TextBlock Text="请您输入日记名称"
                               Width="221"
                               Height="40"
                               TextWrapping="Wrap"
                               Canvas.Left="63"
                               Canvas.Top="27"
                               FontSize="27">
                    </TextBlock>
                    <TextBox   Name="fileNameTextBox"
                               Width="338"
                               Height="77"
                               TextWrapping="Wrap"
                               Canvas.Left="6"
                               Canvas.Top="97"
                               FontSize="27"
                               TextChanged="fileNameTextBox_TextChanged">
                    </TextBox>
                    <Button Name="btnOk"
                            Canvas.Left="0"
                            Canvas.Top="222"
                            Content="确定"
                            Width="150"
                            Click="btnOk_Click">
                    </Button>
                    <Button Name="btnClear"
                            Canvas.Left="194"
                            Canvas.Top="222"
                            Content="清除"
                            Width="150"
                            Click="btnClear_Click">
                    </Button>
                </Canvas>

            </Grid>
        </Grid>

        <!--Sample code showing usage of ApplicationBar-->
        <phone:PhoneApplicationPage.ApplicationBar>
            <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">
                <shell:ApplicationBarIconButton IconUri="/Images/appbar.save.rest.png" Text="保存" Click="Appbar_Save_Click"/>
                <shell:ApplicationBarIconButton IconUri="/Images/appbar.cancel.rest.png" Text="取消"  Click="Appbar_Cancel_Click"/>
            </shell:ApplicationBar>
        </phone:PhoneApplicationPage.ApplicationBar>

      说明:displayTextBlock显示日记内容,editTextBox编辑日记内容,namedDialog是命名文件的对话框

      1)Appbar_Save_Click事件

          private void Appbar_Save_Click(object sender, EventArgs e)
            {
                this.displayTextBlock.Text = this.editTextBox.Text;
                this.displayTextBlock.Visibility = Visibility.Visible;
                this.editTextBox.Visibility = Visibility.Collapsed;
                this.namedDialog.Visibility = Visibility.Visible;
            }

      2)btnClear_Click事件

          private void btnClear_Click(object sender, RoutedEventArgs e)
            {
                this.fileNameTextBox.Text = "";
            }

      3)btnOk_Click事件  

         private void btnOk_Click(object sender, RoutedEventArgs e)
            {
                this.namedDialog.Visibility = Visibility.Collapsed;
                var appStorage = IsolatedStorageFile.GetUserStoreForApplication();

          //构建文件全名

                StringBuilder sb = new StringBuilder();
                sb.Append(DateTime.Now.Year);
                sb.Append("_");
                sb.Append(string.Format("{0:00}", DateTime.Now.Month));
                sb.Append("_");
                sb.Append(string.Format("{0:00}", DateTime.Now.Day));
                sb.Append("_");
                sb.Append(string.Format("{0:00}", DateTime.Now.Hour));
                sb.Append("_");
                sb.Append(string.Format("{0:00}", DateTime.Now.Minute));
                sb.Append("_");
                sb.Append(string.Format("{0:00}", DateTime.Now.Second));
                sb.Append("_");
                sb.Append(fileName);
                sb.Append(".txt");

                fileFullName = sb.ToString();

                try
                {

            //创建文件  
                    using (var fileStream = appStorage.OpenFile(fileFullName, FileMode.Create))
                    {
                        using (StreamWriter writer = new StreamWriter(fileStream))
                        {

                //向文件中写入内容
                          writer.WriteLine(this.editTextBox.Text);
                        }
                    }
                }
                catch (Exception)
                {

                }

                navigateBack();
            }

      例如我们输入如图信息

      

      将其保存,我们查看一下文件全名如图

      

      4)fileNameTextBox_TextChanged事件

          this.fileName = this.fileNameTextBox.Text;

      5)navigateBack()方法

         private void navigateBack()
            {

           NavigationService.Navigate(new Uri("/XapNote;component/MainPage.xaml", UriKind.Relative));
            }

      6)Appbar_Cancel_Click事件

         private void Appbar_Cancel_Click(object sender, EventArgs e)
            {
                navigateBack();
            }

      完整Add.xaml代码如下:

    <phone:PhoneApplicationPage
        x:Class="XapNote.Add"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
        xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        FontFamily="{StaticResource PhoneFontFamilyNormal}"
        FontSize="{StaticResource PhoneFontSizeNormal}"
        Foreground="{StaticResource PhoneForegroundBrush}"
        SupportedOrientations="PortraitOrLandscape" Orientation="Portrait"
        mc:Ignorable="d" d:DesignHeight="696" d:DesignWidth="480"
        shell:SystemTray.IsVisible="True" Loaded="PhoneApplicationPage_Loaded">

        <!--LayoutRoot is the root grid where all page content is placed-->
        <Grid x:Name="LayoutRoot" Background="Transparent">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>

            <!--TitlePanel contains the name of the application and page title-->
            <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
                <TextBlock x:Name="ApplicationTitle" Text="记事本" FontSize="30"/>
                <TextBlock x:Name="PageTitle" Text="添加日记" Margin="9,-7,0,0" FontSize="22" TextAlignment="Center"/>
            </StackPanel>

            <!--ContentPanel - place additional content here-->
            <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
                <TextBlock  Name="displayTextBlock"
                            HorizontalAlignment="Stretch"
                            VerticalAlignment="Stretch"
                            Visibility="Collapsed">
                </TextBlock>
                <TextBox Name="editTextBox"
                         HorizontalAlignment="Stretch"
                         VerticalAlignment="Stretch"
                         TextChanged="editTextBox_TextChanged">
                </TextBox>
                <Canvas Name="namedDialog"
                        HorizontalAlignment="Left"
                        VerticalAlignment="Top"
                        Background="Red"
                        Margin="59,6,0,0"
                        Width="350"
                        Height="300"
                        Visibility="Collapsed">
                    <TextBlock Text="请您输入日记名称"
                               Width="221"
                               Height="40"
                               TextWrapping="Wrap"
                               Canvas.Left="63"
                               Canvas.Top="27"
                               FontSize="27">
                    </TextBlock>
                    <TextBox   Name="fileNameTextBox"
                               Width="338"
                               Height="77"
                               TextWrapping="Wrap"
                               Canvas.Left="6"
                               Canvas.Top="97"
                               FontSize="27"
                               TextChanged="fileNameTextBox_TextChanged">
                    </TextBox>
                    <Button Name="btnOk"
                            Canvas.Left="0"
                            Canvas.Top="222"
                            Content="确定"
                            Width="150"
                            Click="btnOk_Click">
                    </Button>
                    <Button Name="btnClear"
                            Canvas.Left="194"
                            Canvas.Top="222"
                            Content="清除"
                            Width="150"
                            Click="btnClear_Click">
                    </Button>
                </Canvas>

            </Grid>
        </Grid>

        <!--Sample code showing usage of ApplicationBar-->
        <phone:PhoneApplicationPage.ApplicationBar>
            <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">
                <shell:ApplicationBarIconButton IconUri="/Images/appbar.save.rest.png" Text="保存" Click="Appbar_Save_Click"/>
                <shell:ApplicationBarIconButton IconUri="/Images/appbar.cancel.rest.png" Text="取消"  Click="Appbar_Cancel_Click"/>
            </shell:ApplicationBar>
        </phone:PhoneApplicationPage.ApplicationBar>
    </phone:PhoneApplicationPage>

      完整Add.cs如下:   

      public partial class Add : PhoneApplicationPage
        {
            #region 私有变量
            private string fileFullName;
            private string fileName;
            IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;

            #endregion

            #region 构造器

            public Add()
            {
                InitializeComponent();
            }

            #endregion

            #region Appbar事件

            #region 保存日记事件

            private void Appbar_Save_Click(object sender, EventArgs e)
            {
                this.displayTextBlock.Text = this.editTextBox.Text;
                this.displayTextBlock.Visibility = Visibility.Visible;
                this.editTextBox.Visibility = Visibility.Collapsed;
                this.namedDialog.Visibility = Visibility.Visible;
            }

            #endregion

            #region 取消保存日记事件

            private void Appbar_Cancel_Click(object sender, EventArgs e)
            {
                navigateBack();
            }

            #endregion

            #endregion

            #region 页面导航方法

            private void navigateBack()
            {
                settings["state"] = "";
                settings["value"] = "";
                NavigationService.Navigate(new Uri("/XapNote;component/MainPage.xaml", UriKind.Relative));
            }

            #endregion

            #region 程序加载事件

            private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
            {
                string state = "";

                if (settings.Contains("state"))
                {
                    if (settings.TryGetValue<string>("state", out state))
                    {
                        if (state == "add")
                        {

                            string value = "";
                            if (settings.Contains("value"))
                            {
                                if (settings.TryGetValue<string>("value", out value))
                                {
                                    this.editTextBox.Text = value;
                                }
                            }
                        }
                    }
                }

                settings["state"] = "add";
                settings["value"] = this.editTextBox.Text;
                this.editTextBox.SelectionStart = this.editTextBox.Text.Length;
                this.editTextBox.Focus();
            }

            #endregion

            #region editTextBox_TextChanged

            private void editTextBox_TextChanged(object sender, TextChangedEventArgs e)
            {
                settings["value"] = this.editTextBox.Text;
            }

            #endregion

            private void btnClear_Click(object sender, RoutedEventArgs e)
            {
                this.fileNameTextBox.Text = "";
            }

            private void btnOk_Click(object sender, RoutedEventArgs e)
            {
                this.namedDialog.Visibility = Visibility.Collapsed;
                var appStorage = IsolatedStorageFile.GetUserStoreForApplication();

                StringBuilder sb = new StringBuilder();
                sb.Append(DateTime.Now.Year);
                sb.Append("_");
                sb.Append(string.Format("{0:00}", DateTime.Now.Month));
                sb.Append("_");
                sb.Append(string.Format("{0:00}", DateTime.Now.Day));
                sb.Append("_");
                sb.Append(string.Format("{0:00}", DateTime.Now.Hour));
                sb.Append("_");
                sb.Append(string.Format("{0:00}", DateTime.Now.Minute));
                sb.Append("_");
                sb.Append(string.Format("{0:00}", DateTime.Now.Second));
                sb.Append("_");
                sb.Append(fileName);
                sb.Append(".txt");

                fileFullName = sb.ToString();

                try
                {
                    using (var fileStream = appStorage.OpenFile(fileFullName, FileMode.Create))
                    {
                        using (StreamWriter writer = new StreamWriter(fileStream))
                        {
                            writer.WriteLine(this.editTextBox.Text);
                        }
                    }
                }
                catch (Exception)
                {

                }

                navigateBack();
            }

            private void fileNameTextBox_TextChanged(object sender, TextChangedEventArgs e)
            {
                this.fileName = this.fileNameTextBox.Text;
            }
        }

      四、修改日记功能

      1.ViewEdit.xaml页面

    <phone:PhoneApplicationPage
        x:Class="XapNote.ViewEdit"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
        xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        FontFamily="{StaticResource PhoneFontFamilyNormal}"
        FontSize="{StaticResource PhoneFontSizeNormal}"
        Foreground="{StaticResource PhoneForegroundBrush}"
        SupportedOrientations="PortraitOrLandscape" Orientation="Portrait"
        mc:Ignorable="d" d:DesignHeight="696" d:DesignWidth="480"
        shell:SystemTray.IsVisible="True" Loaded="PhoneApplicationPage_Loaded">

        <!--LayoutRoot is the root grid where all page content is placed-->
        <Grid x:Name="LayoutRoot" Background="Transparent">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>

            <!--TitlePanel contains the name of the application and page title-->
            <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
                <TextBlock x:Name="ApplicationTitle" Text="记事本" FontSize="30"/>
                <TextBlock x:Name="PageTitle" Text="编辑日记" Margin="9,-7,0,0" FontSize="22" TextAlignment="Center"/>
            </StackPanel>

            <!--ContentPanel - place additional content here-->
            <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
                <TextBlock Name="displayTextBlock"
                           HorizontalAlignment="Stretch"
                           VerticalAlignment="Stretch"
                           Visibility="Visible"
                           TextWrapping="Wrap">
                </TextBlock>

                <TextBox Name="editTextBox"
                         HorizontalAlignment="Stretch"
                         VerticalAlignment="Stretch"
                         Visibility="Collapsed"
                         TextWrapping="Wrap"
                         TextChanged="editTextBox_TextChanged"
                         >
                </TextBox>
                <Canvas Name="confirmDialog"
                        HorizontalAlignment="Left"
                        VerticalAlignment="Top"
                        Background="Red"
                        Margin="50,100,0,0"
                        Width="350"
                        Height="300"
                        Visibility="Collapsed">
                    <TextBlock Text="您确定要删除这篇日记吗?"
                               Width="330"
                               Height="40"
                               TextWrapping="Wrap"
                               Canvas.Left="20"
                               Canvas.Top="87"
                               FontSize="27">
                    </TextBlock>
                    <Button Name="btnCancel"
                            Canvas.Left="0"
                            Canvas.Top="222"
                            Content="取消"
                            Width="150"
                            Click="btnCancel_Click">
                    </Button>
                    <Button Name="btnOk"
                            Canvas.Left="194"
                            Canvas.Top="222"
                            Content="确定"
                            Width="150"
                            Click="btnOk_Click">
                    </Button>
                </Canvas>
            </Grid>
        </Grid>

        <!--Sample code showing usage of ApplicationBar-->
        <phone:PhoneApplicationPage.ApplicationBar>
            <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">
                <shell:ApplicationBarIconButton IconUri="/Images/appbar.back.rest.png" Text="返回" Click="Appbar_Back_Click"/>
                <shell:ApplicationBarIconButton IconUri="/Images/appbar.edit.rest.png" Text="编辑" Click="Appbar_Edit_Click"/>
                <shell:ApplicationBarIconButton IconUri="/Images/appbar.save.rest.png" Text="保存" Click="Appbar_Save_Click"/>
                <shell:ApplicationBarIconButton  IconUri="/Images/appbar.delete.rest.png" Text="删除" Click="Appbar_Delete_Click"/>
            </shell:ApplicationBar>
        </phone:PhoneApplicationPage.ApplicationBar>

    </phone:PhoneApplicationPage>

      2.Appbar_Edit_Click事件

        if (this.displayTextBlock.Visibility == Visibility.Visible)
                {
                    bindEdit(this.displayTextBlock.Text);
                }

      3.bindEdit方法    

      private void bindEdit(string content)
            {
                this.editTextBox.Text = content;
                this.displayTextBlock.Visibility = Visibility.Collapsed;
                this.editTextBox.Visibility = Visibility.Visible;

                this.editTextBox.Focus();
                this.editTextBox.SelectionStart = this.editTextBox.Text.Length;
            }

      4.ppbar_Save_Click事件

        private void Appbar_Save_Click(object sender, EventArgs e)
            {
                if (this.editTextBox.Visibility == Visibility.Visible)
                {
                    var appStorage = IsolatedStorageFile.GetUserStoreForApplication();

                    try
                    {
                        using (var fileStream = appStorage.OpenFile(fileName, FileMode.Create))
                        {
                            using (StreamWriter writer = new StreamWriter(fileStream))
                            {
                                writer.WriteLine(this.editTextBox.Text);
                            }
                        }
                    }
                    catch (Exception)
                    {

                    }

                    this.displayTextBlock.Text = this.editTextBox.Text;
                    this.displayTextBlock.Visibility = Visibility.Visible;
                    this.editTextBox.Visibility = Visibility.Collapsed;
                }
            }

     

      五、删除日记功能

      1.Appbar_Delete_Click事件

          var appStorage = IsolatedStorageFile.GetUserStoreForApplication();
                appStorage.DeleteFile(fileName);
                this.confirmDialog.Visibility = Visibility.Collapsed;
                navigateBack();

      ViewEdit.cs完整代码

       public partial class ViewEdit : PhoneApplicationPage
        {
            #region 私有变量

            private string fileName = "";
            IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;

            #endregion

            #region 构造器

            public ViewEdit()
            {
                InitializeComponent();
            }

            #endregion

            #region Appbar事件

            #region 返回主界面事件

            private void Appbar_Back_Click(object sender, EventArgs e)
            {
                navigateBack();
            }

            #endregion

            #region 编辑日记事件

            private void Appbar_Edit_Click(object sender, EventArgs e)
            {
                if (this.displayTextBlock.Visibility == Visibility.Visible)
                {
                    bindEdit(this.displayTextBlock.Text);
                }
            }

            #endregion

            #region 保存日记事件

            private void Appbar_Save_Click(object sender, EventArgs e)
            {
                if (this.editTextBox.Visibility == Visibility.Visible)
                {
                    var appStorage = IsolatedStorageFile.GetUserStoreForApplication();

                    try
                    {
                        using (var fileStream = appStorage.OpenFile(fileName, FileMode.Create))
                        {
                            using (StreamWriter writer = new StreamWriter(fileStream))
                            {
                                writer.WriteLine(this.editTextBox.Text);
                            }
                        }
                    }
                    catch (Exception)
                    {

                    }

                    this.displayTextBlock.Text = this.editTextBox.Text;
                    this.displayTextBlock.Visibility = Visibility.Visible;
                    this.editTextBox.Visibility = Visibility.Collapsed;
                }
            }

            #endregion

            #region 删除日记事件

            private void Appbar_Delete_Click(object sender, EventArgs e)
            {
                this.confirmDialog.Visibility = Visibility.Visible;
                // navigateBack();
            }

            #endregion

            #endregion

            #region 页面加载事件

            private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
            {
                string state = "";

                if (settings.Contains("state"))
                {
                    if (settings.TryGetValue<string>("state", out state))
                    {
                        if (state == "edit")
                        {
                            string value = "";

                            if (settings.Contains("fileName"))
                            {
                                if (settings.TryGetValue<string>("fileName", out value))
                                {
                                    fileName = value;
                                }
                            }

                            if (settings.Contains("value"))
                            {
                                if (settings.TryGetValue<string>("value", out value))
                                {
                                    bindEdit(value);
                                }
                            }
                        }

                        else
                        {
                            bindView();
                        }
                    }
                }

                else
                {
                    bindView();
                }
            }

            #endregion

            #region bindView

            private void bindView()
            {
                if (NavigationContext.QueryString["id"] != null)
                {
                    fileName = NavigationContext.QueryString["id"];
                }

                var appStorage = IsolatedStorageFile.GetUserStoreForApplication();

                try
                {
                    using (var file = appStorage.OpenFile(fileName, FileMode.Open))
                    {
                        using (StreamReader reader = new StreamReader(file))
                        {
                            displayTextBlock.Text = reader.ReadToEnd();
                        }
                    }
                }
                catch (Exception)
                {

                }

            }

             #endregion

            #region bindEdit

            private void bindEdit(string content)
            {
                this.editTextBox.Text = content;
                this.displayTextBlock.Visibility = Visibility.Collapsed;
                this.editTextBox.Visibility = Visibility.Visible;

                this.editTextBox.Focus();
                this.editTextBox.SelectionStart = this.editTextBox.Text.Length;

                settings["state"] = "edit";
                settings["value"] = this.editTextBox.Text;
                settings["fileName"] = fileName;
            }

            #endregion

            #region 页面导航事件

            private void navigateBack()
            {
                settings["state"] = "";
                settings["value"] = "";
                settings["fileName"] = "";
                NavigationService.Navigate(new Uri("/XapNote;component/MainPage.xaml", UriKind.Relative));
            }

            #endregion

            #region 取消删除事件

            private void btnCancel_Click(object sender, RoutedEventArgs e)
            {
                this.confirmDialog.Visibility = Visibility.Collapsed;
            }

            #endregion

            #region 确定删除事件

            private void btnOk_Click(object sender, RoutedEventArgs e)
            {
                var appStorage = IsolatedStorageFile.GetUserStoreForApplication();
                appStorage.DeleteFile(fileName);
                this.confirmDialog.Visibility = Visibility.Collapsed;
                navigateBack();
            }

            #endregion

            #region editTextBox_TextChanged

            private void editTextBox_TextChanged(object sender, TextChangedEventArgs e)
            {
                settings["value"] = this.editTextBox.Text;
            }

            #endregion

      结束语:

        本篇随笔就讲到这里,谢谢!

      源码下载:

        点击这里下载程序源码

     

  • 相关阅读:
    uboot中fdt命令的使用
    unlocked_ioctl与compat_ioctl
    I2C中关于ACK和NACK的几点东西
    对IIC总线时序的一点理解以及ACK和NACK(NAK)
    usb Defined Class Codes
    排序检索数据
    【转载】5.Linux 网络编程——UDP编程
    【转载】4.Linux 网络编程——套接字的介绍
    【转载】3.Linux 网络编程——网络字节序、地址转换
    【转载】2. Linux 网络编程——网络字节序、地址转换
  • 原文地址:https://www.cnblogs.com/salam/p/1922631.html
Copyright © 2020-2023  润新知