Isolated Storage

之所以叫isolated,是因为一个app的数据不能被另一个app访问。

IsolatedStorageSettings尽管有一个Save方法,但其实没有必要调用它。因为程序在close或deactive的时候都会保存数据。唯一说得过去的调用Save方法的时候,是因为app崩溃退出而丢失数据。

app升级后,Isolated Storage中的数据保留。app卸载后,数据删除。

Isolated Storage没有大小限制,只受手机存储大小的限制。

 

颜色选择控件

Shared/ColorPicker目录下有一个很好用的颜色选择控件。

 

使用自定义字体

    <TextBlock FontFamily="Fonts/pendule_ornamental.ttf#pendule ornamental"
               Opacity=".1">
      <!-- It's important not to have whitespace between the runs!-->
      <Run x:Name="TimeBackgroundRun">88:88</Run><Run 
           x:Name="SecondsBackgroundRun">88</Run>
    </TextBlock>

首先把字体文件加入项目中,在XAML中的语法是:

字体文件路径#字体名

字体文件ttf在windows下能直接打开、安装。

 

Value Converter

主要用于:在数据绑定中用把一种类型的转换成另一种类型。

一个能够作为转换器的类型必须实现IValueConverter接口,即Convert和ConvertBack两个方法。

在单向绑定时因为不需要ConvertBack,可以让ConvertBack方法直接返回DependencyProperty.UnsetValue。

下面是实现这两个方法的一个例子:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
  DateTimeOffset date = (DateTimeOffset)value;
  // Return a custom format
  return date.LocalDateTime.ToShortDateString() + " " 
       + date.LocalDateTime.ToShortTimeString();
}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
  return DependencyProperty.UnsetValue; 
}
在XAML里可直接指定转换器,在指定之前,需要在资源字典里创建一个转换器的实例。
  <phone:PhoneApplicationPage.Resources>
    <local:DateConverter x:Key="DateConverter"/>
  </phone:PhoneApplicationPage.Resources>

然后在XAML里引用:

<TextBlock Text="{Binding Modified, Converter={StaticResource DateConverter}}" />

如果要在XAML中指定parameter和culture则这样写:

image


文件读写

public string Filename { get; set; }

public void SaveContent(string content)
{
  using (IsolatedStorageFile userStore = IsolatedStorageFile.GetUserStoreForApplication())
  using (IsolatedStorageFileStream stream = userStore.CreateFile(this.Filename))
  using (StreamWriter writer = new StreamWriter(stream))
  {
    writer.Write(content);
  }
}

public string GetContent()
{
  using (IsolatedStorageFile userStore = IsolatedStorageFile.GetUserStoreForApplication())
  {
      if (!userStore.FileExists(this.Filename))
      { 
          return string.Empty; 
      }
      else
      {
          using (IsolatedStorageFileStream stream = userStore.OpenFile(this.Filename, FileMode.Open))
          using (StreamReader reader = new StreamReader(stream))
          {
              return reader.ReadToEnd();
          }
      }
  }
}

public void DeleteContent()
{
    using (IsolatedStorageFile userStore = IsolatedStorageFile.GetUserStoreForApplication())
    { 
        userStore.DeleteFile(this.Filename); 
    }
}
posted on 2011-10-21 23:45  MainTao  阅读(284)  评论(0编辑  收藏  举报