• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 55  文章 - 15  trackbacks - 0
            <2013年1月>
            303112345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            常用鏈接

            留言簿

            隨筆分類

            隨筆檔案

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

                  不積跬步無以至千里。為什么要說這么一句話呢?是因為我學習Windows 8 開發是沒有系統性可言的,而且根據微軟MSDN官方的RoadMap進行學習的話我也覺得是零散而且不系統的,所以我的計劃就是自己做個應用,碰到問題解決問題,解決問題記錄問題,記錄問題以便下次遇到可以知道在哪里找到。所以我走的都是一個個雜亂的跬步,但是這是經驗的積累,希望有一天能至千里,我對這一天抱有期望。
                  額,跑題了,今天的主題是添加照片,還是先上圖吧,老規矩:
                  
            先說說我的解決方案吧,我盡量描述的清楚:
                  這是一個GridView,GridView中放置的是一堆DataItem,每一個DataItem中都有一個Image屬性,也有一個imagePath屬性,用來接收圖片的地址:

                  
             1         public ref class SampleDataCommon : TestViewState::Common::BindableBase
             2         {
             3 
             4         public:
             5               void SetImage(Platform::String^ path);
             6               property Windows::UI::Xaml::Media::ImageSource^ Image { Windows::UI::Xaml::Media::ImageSource^ get(); 
                                                                                                               
            void set(Windows::UI::Xaml::Media::ImageSource^ value); }
             7 
             8         private:
             9 
            10             Windows::UI::Xaml::Media::ImageSource^ _image;
            11             Platform::String^ _imagePath;
            12 
            13         };
            14 


            正如大家所看到的那樣,SetImage(..)方法接收一個String^ 類型的路徑,用來設置圖片。我們來看這個方法做了些什么:
             1 ImageSource^ SampleDataCommon::Image::get()
             2 {
             3     static Uri^ _baseUri = ref new Uri("ms-appx:///");// 待添加 ms-appdata:///    
             4     if (_image == nullptr && _imagePath != nullptr)
             5     {
             6         _image = ref new BitmapImage(_baseUri->CombineUri(_imagePath));// _baseUri + _imagePath
             7         
             8     }
             9     return _image;
            10 }
            11 
            12 void SampleDataCommon::Image::set(ImageSource^ value)
            13 {
            14     if (_image != value)
            15     {
            16         _image = value;
            17         _imagePath = nullptr;
            18         OnPropertyChanged("Image");
            19         PropertySet set;
            20     }
            21 }
            22 
            23 void SampleDataCommon::SetImage(String^ path)
            24 {
            25     _image = nullptr;
            26     _imagePath = path;
            27     OnPropertyChanged("Image");
            28 }
            29 

            SetImage方法只是把path傳遞給back store _imagePath, 通過_imagePath,在Image::get()方法中,我們看到,一個ms-appx:///目錄下的文件被作為源賦給了image。其實這個完整的路徑應該是:ms-appx:///Asset/Gray.png.

            一般文件都有一個路徑,基本上是這樣的:<scheme>://<domain name>/<path>.
            在Windows 8 中,所有的文件都是從App的package中讀取出來的 。代表App的本地打包文件的scheme是“ms-appx:"domain name 可有可無,一般都省略掉,這樣App就假定domain name指的是App package的full name。
            你也可以用 "/"來表示pakage的根目錄,例如:"/pic.png"就是指在你的應用的根目錄下的pic.png。

            Your app doesn't have access to E:\demo folder.  Your application has default access only to items within its app data and app package folders. By declaring the appropriate Capabilities(such as Picture Library access) it can get brokered access to files in libraries.
            If you are loading a hard coded image then it should be in the app package.
            You can't reference images on the file system outside of your package from Xaml, and doing so doesn't make much sense: you can't be sure that those images will even exist. 

                  這幾句話很簡單,就是說,你只能使用包內的路徑,或者你在Capability設置了可以訪問Picture Library的話,你也可以用路徑直接訪問這里面的圖片之類的文件。但是,如果你想使用路徑訪問其他地方的文件,那是不可能的。怎么辦?使用流:

                  我錯了,忘了把如何將圖片放置在控件中的代碼貼出來了。
             
             1 FileOpenPicker^ openPicker = ref new FileOpenPicker();
             2         openPicker->ViewMode = PickerViewMode::Thumbnail;
             3         openPicker->SuggestedStartLocation = PickerLocationId::PicturesLibrary;
             4         openPicker->FileTypeFilter->Append(".jpg");
             5         openPicker->FileTypeFilter->Append(".jpeg");
             6         openPicker->FileTypeFilter->Append(".png");
             7 
             8         create_task(openPicker->PickSingleFileAsync()).then([this,clickedItem](StorageFile^ file)
             9         {
            10             if(file)
            11             {
            12                 create_task(file->OpenAsync(FileAccessMode::Read)).then([this,clickedItem](IRandomAccessStream^ stream)
            13                 {
            14                     
            15                     auto bitmap = ref new BitmapImage();
            16                     bitmap->SetSource(stream);
            17                     clickedItem->Image = bitmap;
            18                 });
            19             }
            20             else
            21             {
            22                 clickedItem->Image = nullptr;
            23             }
            24         });
                 
            這里使用了FilePicker來選擇文件,選擇文件之后,然后打開文件,得到IRandomAccessStream^l流,然后賦值給BitmapImage的源,就可以顯示我們選擇的圖片了。是挺簡單的。感謝一下Draw/C#同學。如果你看到的話,thanks!

            下章提要:如何在Resouce Dictionary中查找Style,并且賦值給控件,今天一直在研究這玩意。C#下好像很容易搞定,但是在C++下怎么就會出現exception呢?已經在MSDN論壇上發帖問了,希望有個答案。
            posted on 2012-10-23 17:57 Dino-Tech 閱讀(1216) 評論(0)  編輯 收藏 引用 所屬分類: Windows 8
            中文字幕久久久久人妻| 亚洲精品乱码久久久久久久久久久久 | 99久久无色码中文字幕| 精品久久久噜噜噜久久久| 欧美久久精品一级c片片| 亚洲国产成人久久综合一区77 | 噜噜噜色噜噜噜久久| 久久av无码专区亚洲av桃花岛| 国产巨作麻豆欧美亚洲综合久久 | 91精品国产高清久久久久久io| 91精品久久久久久无码| 色偷偷偷久久伊人大杳蕉| 激情五月综合综合久久69| 99999久久久久久亚洲| 久久综合亚洲色HEZYO社区| 国产女人aaa级久久久级| 亚洲午夜久久久久久噜噜噜| 国内精品久久久久久久影视麻豆| 国产偷久久久精品专区 | 香蕉久久一区二区不卡无毒影院 | 91精品国产91久久久久福利 | 亚洲精品美女久久久久99| 热综合一本伊人久久精品| 狠狠色丁香久久婷婷综| 潮喷大喷水系列无码久久精品| 少妇人妻综合久久中文字幕| 久久久噜噜噜久久| 99久久国产综合精品网成人影院| 丰满少妇人妻久久久久久| 久久天天躁狠狠躁夜夜网站| 狠狠色婷婷久久综合频道日韩| 午夜福利91久久福利| 中文字幕久久精品 | 国产精品99久久久精品无码| 久久精品国产精品亜洲毛片| 久久精品18| 久久亚洲高清综合| 午夜精品久久久内射近拍高清| 欧美亚洲国产精品久久| 欧美日韩精品久久免费| 久久亚洲中文字幕精品有坂深雪|