| 
 | 
	
 
 
  前言(一些废话哈,可以略过) 
    wp8.1的SDK相对8.0的还是变化不少的,类改变了很多,我就是我遇到的一些问题总结下,大家有用到的可以少走些弯路,一些东西国内都搜不到 
  (做这个人少,资料少,开始移植到wp8.1的也少些),建议小伙伴们google,或者关键字用英文搜索比较好,其实我大多都在stackoverflow找到的, 
  看官方文档也可以,但是就比较慢了。 
  正文 
       MessageBox被MessageDialog取代了具体用法如下(有些变量名是随手写的,没经过思考。。。大家可以改下) 
 
 
 
        public async static void ShowCustomDialog(string title, string mes, string ok, Action ok_callback, string cancel, Action cancel_callback) 
{ 
MessageDialog c = new MessageDialog(mes,title); 
UICommand ok_cmd = new UICommand(ok); 
ok_cmd.Invoked += (dd) => 
{ 
if (ok_callback != null) 
{ 
ok_callback.Invoke(); 
} 
}; 
UICommand canle_cmd = new UICommand(cancel); 
ok_cmd.Invoked += (dd) => 
{ 
if (cancel_callback != null) 
{ 
cancel_callback.Invoke(); 
}; 
}; 
c.Commands.Add(ok_cmd); 
c.Commands.Add(canle_cmd); 
IUICommand result = await c.ShowAsync(); 
} 
  获取设备基本信息的类DeviceStatus被EasClientDeviceInformation取代基本用法如下 
 
 
 
       public static string GetDeviceInfo() 
{ 
Windows.Security.ExchangeActiveSyncProvisioning.EasClientDeviceInformation deviceInfo = new Windows.Security.ExchangeActiveSyncProvisioning.EasClientDeviceInformation(); 
var firmwareVersion = deviceInfo.SystemFirmwareVersion; 
string d = "{\"devicename\":\"" + deviceInfo.SystemProductName + "\",\"deviceManufacturer\":\"" + deviceInfo.SystemManufacturer + "\"}"; 
return d; 
} 
 
  获取设备唯一ID的类DeviceExtendedProperties.TryGetValue("DeviceUniqueId", out uniqueId))被HardwareIdentification取代,具体使用如下 
 
 
 
        public static string GetDeviceUniqueID() 
{ 
HardwareToken token = HardwareIdentification.GetPackageSpecificToken(null); 
IBuffer hardwareId = token.Id; 
HashAlgorithmProvider hasher = HashAlgorithmProvider.OpenAlgorithm("MD5"); 
IBuffer hashed = hasher.HashData(hardwareId); 
string hashedString = CryptographicBuffer.EncodeToHexString(hashed); 
return hashedString; 
} 
 
  在后台进程中执行UI进程任务时候用到的Deployment.Current.Dispatcher.BeginInvoke 被CoreWindow.GetForCurrentThread().Dispatcher取代,具体用法 
 
 
 
var dispatcher = CoreApplication.MainView.CoreWindow.Dispatcher; 
     await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => 
   { // UI code goes here 
     }); 
 
//or  
CoreApplication.MainWindow.CoreWindow.Dispatcher.RunAsync( 
CoreDispatcherPriority.Normal, 
()=>{ 
// UI code goes here 
}); 
 
  当前线程睡眠的Thread.Sleep()被 await Task.Delay(1000)取代 
  IsolatedStorageSettings被ApplicationData.Current.RoamingSettings取代,IsolatedStorageFile被ApplicationData.Current.LocalFolder;取代,具体使用如下 
   
 
 
 
  public class IsolatedStorageHelper 
{ 
private static ApplicationDataContainer _appSettings= ApplicationData.Current.RoamingSettings; 
public static T LoadSetttingFromStorage(string Key, T defaultValue) 
{ 
T ObjToLoad = default(T); 
if (_appSettings.Values.Keys.Contains(Key)) 
{ 
ObjToLoad = (T)_appSettings.Values[Key]; 
} 
else 
{ 
ObjToLoad = defaultValue; 
} 
return ObjToLoad; 
} 
public static void SaveSettingToStorage(string Key, object Setting) 
{ 
if (!_appSettings.Values.Keys.Contains(Key)) 
{ 
_appSettings.Values.Add(Key, Setting); 
} 
else 
{ 
_appSettings.Values[Key] = Setting; 
} 
 
} 
public static bool IsSettingPersisted(string Key) 
{ 
return _appSettings.Values.Keys.Contains(Key); 
} 
public static bool DeleteSettingPersisted(string Key) 
{ 
while (_appSettings.Values.Keys.Contains(Key)) 
{ 
_appSettings.Values.Remove(Key); 
} 
return false; 
} 
public static async Task AppendStrToFolder(string str) 
{ 
str = "时间:" + DateTime.Now.ToString() + str; 
// 获取应用程序数据存储文件夹 
StorageFolder applicationFolder = ApplicationData.Current.LocalFolder; 
// 在指定的应用程序数据存储文件夹内创建指定的文件 
StorageFile storageFile = await applicationFolder.CreateFileAsync("LuaPostJsonStr.txt", CreationCollisionOption.OpenIfExists); 
// 将指定的文本内容写入到指定的文件 
using (Stream stream = await storageFile.OpenStreamForWriteAsync()) 
{ 
byte[] content = Encoding.UTF8.GetBytes(str); 
await stream.WriteAsync(content, 0, content.Length); 
} 
return true; 
} 
public static async Task WriteFile(string filename,string content) 
{ 
content = "时间:" + DateTime.Now.ToString() + "--------" + content; 
IStorageFolder applicationFolder = ApplicationData.Current.LocalFolder; 
IStorageFile storageFile = await applicationFolder.CreateFileAsync(filename, CreationCollisionOption.OpenIfExists); 
try 
{ 
using (Stream transaction = await storageFile.OpenStreamForWriteAsync()) 
{ 
byte[] contents = Encoding.UTF8.GetBytes(content); 
//设置如何打开流的位置有内容就设置流的位置到结束位置 
if (transaction.CanSeek) 
{ 
transaction.Seek(transaction.Length, SeekOrigin.Begin); 
} 
await transaction.WriteAsync(contents,0, contents.Length); 
return true; 
} 
} 
catch (Exception exce) 
{ 
return false; 
// OutputTextBlock.Text = "异常:" + exce.Message; 
} 
} 
public static async Task SavePic(UIElement root, string filename) 
{ 
RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap(); 
await renderTargetBitmap.RenderAsync(root); 
var pixelBuffer = await renderTargetBitmap.GetPixelsAsync(); 
string path = "picSdk"; 
StorageFolder storageFolder = ApplicationData.Current.LocalFolder; 
StorageFolder store = await storageFolder.CreateFolderAsync(path, CreationCollisionOption.OpenIfExists);     
string ss = Path.Combine(path, filename); 
StorageFile file = await store.CreateFileAsync(ss); 
 
using (var fileStream = await file.OpenAsync(FileAccessMode.ReadWrite)) 
{ 
var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, fileStream); 
encoder.SetPixelData( 
BitmapPixelFormat.Bgra8, 
BitmapAlphaMode.Ignore, 
(uint)renderTargetBitmap.PixelWidth, 
(uint)renderTargetBitmap.PixelHeight, 
DisplayInformation.GetForCurrentView().LogicalDpi, 
DisplayInformation.GetForCurrentView().LogicalDpi, 
pixelBuffer.ToArray()); 
await encoder.FlushAsync(); 
} 
} 
 
public static async Task SaveFile(StorageFile filee) 
{ 
string path = "picSdk"; 
StorageFolder storageFolder = ApplicationData.Current.LocalFolder; 
StorageFolder store = await storageFolder.CreateFolderAsync(path, CreationCollisionOption.OpenIfExists); 
string ss = Path.Combine(path, filee.Name); 
StorageFile file = await store.CreateFileAsync(ss); 
await filee.MoveAndReplaceAsync(file); 
return true; 
 
} 
public static async Task< BitmapImage> LoadPic(string folderName,string fileName) 
{ 
BitmapImage source = new BitmapImage(); 
// Reopen and load the PNG file. 
if (await IsExistFolder(folderName)) 
{ 
var folder = ApplicationData.Current.LocalFolder; 
if (await IsExistFile(fileName,folderName)) 
{ 
StorageFile file = await folder.GetFileAsync(fileName); 
using (var fileStream = await file.OpenAsync(FileAccessMode.ReadWrite)) 
{                     
var encoder = await BitmapDecoder.CreateAsync(BitmapEncoder.PngEncoderId, fileStream); 
var stream = await encoder.GetPreviewAsync(); 
source.SetSource(stream); 
source.CreateOptions = BitmapCreateOptions.None; 
} 
}           
return source; 
} 
else 
{ 
return null; 
} 
} 
public static async Task IsExistFile(string fileName) 
{ 
StorageFolder storageFolder = ApplicationData.Current.LocalFolder; 
try 
{ 
StorageFile file = await storageFolder.GetFileAsync(fileName); 
return true; 
} 
catch (FileNotFoundException e) 
{ 
return false; 
} 
catch (Exception e) 
{ 
return false; 
} 
} 
public static async Task IsExistFile(string fileName,string folderName) 
{ 
StorageFolder storageFolder = ApplicationData.Current.LocalFolder; 
StorageFolder folder= await storageFolder.GetFolderAsync(folderName); 
try 
{ 
StorageFile file = await folder.GetFileAsync(fileName); 
return true; 
} 
catch (FileNotFoundException e) 
{ 
return false; 
} 
catch (Exception e) 
{ 
return false; 
} 
} 
public static async Task IsExistFolder(string folderName) 
{ 
StorageFolder storageFolder = ApplicationData.Current.LocalFolder; 
try 
{ 
StorageFolder file = await storageFolder.GetFolderAsync(folderName); 
return true; 
} 
catch (FileNotFoundException e) 
{ 
return false; 
} 
catch (Exception e) 
{ 
return false; 
} 
} 
public static async Task< Stream> LoadPicByStream(string filename) 
{ 
var store = ApplicationData.Current.LocalFolder; 
if ( await IsExistFile(filename)) 
{ 
StorageFile file= await store.GetFileAsync(filename); 
// fileStream.Close(); 
return (await file.OpenAsync(FileAccessMode.ReadWrite)).AsStream(); 
} 
else 
{ 
return null; 
} 
} 
} 
 
  最后这个类,东西比较多哈,有的还没来得及测试,那个小伙伴遇到问题也请告诉我下。耽误大家时间了。 |   
 
 
 
 | 
  
 |