WP7開發—簡單記事本的實現

來源:互聯網
上載者:User

PS:本文不是介紹WP高技術含量的文章,只是通過一個小例子,捎帶介紹下WP的基礎知識,大神和WP高手請繞行。

  最近自己在學習WP7開發,看過園子裡好多強人的文章,受益匪淺。當然,學習嘛還是要自己動手,自己就做了一個小小的Demo(記事本應用),該應用主要實現記錄使用者輸入的資訊,可以儲存到檔案中,再次進入時可以看到之前記錄的資訊,該程式很簡單,但是涉及到很多需要注意的知識,希望對你有所協助!

  該應用用到的技術主要有:隔離儲存、ApplicationBar、文本控制項的一些屬性等!

  實現思想:1、主介面定義一個Textbox控制項和一個TextBlock控制項,2個控制項充滿Grid,初始狀態Textbox控制項隱藏,TextBlock顯示;

       2、單擊ApplicationBar的Edit按鈕,Textbox顯示並處於選中狀態,TextBlock隱藏;

       3、在TextBox輸入一些常值內容,點擊ApplicationBar的Save,控制項狀態Textbox控制項隱藏,TextBlock顯示,並將Textbox值賦給TextBlock顯示;

       4、退出應用程式,或者切換應用程式重新回到該頁面,顯示之前儲存的資訊;

         5、單擊ApplicationBar的Delete刪除檔案,再次進入該不會顯示之前儲存的資訊。

  沒做過美工,介面沒怎麼設計,o(∩_∩)o...應用介面如下:

  下面給出詳細的設計過程,以及設計過程中需要注意的問題:

  1:首先建立一個WP項目(Windows Phone應用程式);

  2:修改主介面標題,以便給介面起個合適的名字,主要是2個TextBlock的Text屬性,代碼如下:

<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">            <TextBlock x:Name="ApplicationTitle" Text="我的Demo" Style="{StaticResource PhoneTextNormalStyle}"/>            <TextBlock x:Name="PageTitle" Text="記事本小程式" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/></StackPanel>

  3:在主介面添加2個控制項Textbox和TextBlock,注意使2個控制項填充整個Grid的方式,我用的是設定 VerticalAlignment="Stretch"和HorizontalAlignment="Stretch",表示控制項是從四個邊緣向中間Margin的,此時不設定Margin屬性即可。 同時設定控制項顯示和隱藏的屬性是Visibility="Visible"和Visibility="Collapsed",還有設定Textbox輸入文本自動換行屬性TextWrapping="Wrap",Textbox控制項按斷行符號(Enter)鍵換行的屬性AcceptsReturn="True",代碼如下:

              <TextBox Name="myTextBox"                     VerticalAlignment="Stretch"                     HorizontalAlignment="Stretch"                     Visibility="Collapsed"                     Text=""                     TextWrapping="Wrap"                     AcceptsReturn="True" />            <TextBlock Name="myTextBlock"                       VerticalAlignment="Stretch"                       HorizontalAlignment="Stretch"                       Visibility="Visible"                       Text=""                       TextWrapping="Wrap"                       />

  4:添加3個圖片到項目中,以便在ApplicationBar顯示,右鍵項目--->添加檔案夾--->重新命名為Images--->到C:\Program Files\Microsoft SDKs\Windows Phone\v7.1\Icons\dark目錄下找到需要的圖片粘貼到項目的Images檔案夾下。注意:要設定3個圖片的屬性產生操作為內容,否則在ApplicationBar一直顯示的是XX,而不是設定的圖片。

  5:把項目自動產生的ApplicationBar代碼的注釋去掉,修改為如下代碼(其中IconUri="/Images/appbar.save.rest.png"屬性設定ApplicationBar的顯示映像的路徑):

    <phone:PhoneApplicationPage.ApplicationBar>        <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">            <shell:ApplicationBarIconButton IconUri="/Images/appbar.edit.rest.png" Text="編輯" Click="ApplicationBarEdit_Click"/>            <shell:ApplicationBarIconButton IconUri="/Images/appbar.save.rest.png" Text="儲存" Click="ApplicationBarSave_Click"/>            <shell:ApplicationBarIconButton IconUri="/Images/appbar.delete.rest.png" Text="刪除" Click="ApplicationBarDel_Click"/>        </shell:ApplicationBar>    </phone:PhoneApplicationPage.ApplicationBar>

  6:到現在前台頁面已設定完畢,下面開始寫後台代碼。考慮到進入該頁面時需要載入手機記憶體的資訊,故添加PhoneApplicationPage_Loaded事件載入資料,此時整體考慮該頁面,有3個Click事件和一個Load事件。在這裡我寫2個輔助方法來處理隔離儲存的儲存和載入資料:注意SaveData方法的using (var fileStream = storage.OpenFile(fileName, FileMode.Create))句,要定義FileMode類型為Create,因為在記事本有資訊時,重新儲存需要把之前檔案裡的資料清除,這時才保證檔案是最近編輯的資訊。這裡不太好表達,你可以試試非Create的情況。

          private string fileName = "myFile.txt";      private void SaveData()        {            IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication();            using (var fileStream = storage.OpenFile(fileName, FileMode.Create))            {                using (var sr = new StreamWriter(fileStream))                {                    sr.WriteLine(myTextBox.Text);                }            }        }        private void LoadData()        {            IsolatedStorageFile appstorage = IsolatedStorageFile.GetUserStoreForApplication();            using (var fileStream = appstorage.OpenFile(fileName, FileMode.OpenOrCreate))            {                using (var sr = new StreamReader(fileStream))                {                    myTextBlock.Text = sr.ReadToEnd();                }            }        }

  7:添加Edit事件:注意這裡先判斷了當前頁面的狀態,如果處於非編輯狀態才會執行

        private void ApplicationBarEdit_Click(object sender, EventArgs e)        {            if (myTextBlock.Visibility == Visibility.Visible)            {                myTextBox.Text = myTextBlock.Text;                myTextBox.Visibility = Visibility.Visible;                myTextBlock.Visibility = Visibility.Collapsed;                myTextBox.Focus();            }        }

  8:添加Save事件:

        private void ApplicationBarSave_Click(object sender, EventArgs e)        {            if (myTextBox.Visibility == Visibility.Visible)            {                SaveData();                myTextBlock.Text = myTextBox.Text;                myTextBlock.Visibility = Visibility.Visible;                myTextBox.Visibility = Visibility.Collapsed;            }        }

  9:添加Delete事件:

        private void ApplicationBarDel_Click(object sender, EventArgs e)        {            if (myTextBlock.Visibility == Visibility.Visible)            {                myTextBox.Text = "";                SaveData();                myTextBlock.Text = "";                myTextBlock.Visibility = Visibility.Visible;                myTextBox.Visibility = Visibility.Collapsed;            }        }

至此,該記事本小應用就算完成,裡面還有很多細節沒有提到,望讀者自己挖掘!

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.