2013-07-29 2 views
1

저는 WP 개발을 처음 사용하고 있으며 스스로 해결할 수없는 문제가 있습니다. 설정 페이지를 설정하려고합니다. 그 MSDN 문서에서 대부분의 복사 :클래스를 사용하여 설정 바인딩 (Windows Phone)

http://msdn.microsoft.com/en-us/library/windowsphone/develop/ff769510(v=vs.105).aspx#BKMK_CreatingaSettingsPageThatDoesNotRequireaConfirmationButton

문제는이 라인에 연결 : 그것은 completly 임의 동작

<phone:PhoneApplicationPage.Resources> 
    <local:Page1 x:Key="appSettings" /> 
</phone:PhoneApplicationPage.Resources> 

. 대개의 경우 VS가 충돌합니다. VS가 IsolatedStorage에 연결을 시도하기 때문에 이것이 확실합니다. 하지만 에뮬레이터는 페이지에 액세스하려고 할 때 응용 프로그램을 닫습니다.

설정 페이지의 전체 코드 (페이지 1) :
Page1.xaml :

<phone:PhoneApplicationPage 
    x:Class="MyApp.Page1" 
    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" 

    xmlns:local="clr-namespace:MyApp" 
    FontFamily="{StaticResource PhoneFontFamilyNormal}" 
    FontSize="{StaticResource PhoneFontSizeNormal}" 
    Foreground="{StaticResource PhoneForegroundBrush}" 
    SupportedOrientations="Portrait" Orientation="Portrait" 
    mc:Ignorable="d" d:DesignHeight="768" d:DesignWidth="480" 
    shell:SystemTray.IsVisible="True"> 

    <phone:PhoneApplicationPage.Resources> 
     <local:Page1 x:Key="appSettings" /> 
    </phone:PhoneApplicationPage.Resources> 


     <!--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="MYAPP" Style="{StaticResource PhoneTextNormalStyle}"/> 
       <TextBlock x:Name="PageTitle" Text="settings" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/> 
      </StackPanel> 
     <Grid x:Name="ContentGrid" Grid.Row="1"> 
      <CheckBox Content="CheckBox Setting" Height="Auto" HorizontalAlignment="Left" Margin="60,20,0,0" Name="checkBoxSetting" VerticalAlignment="Top" 
      IsChecked="{Binding Source={StaticResource appSettings}, Path=CheckBoxSetting, Mode=TwoWay}" /> 

      <ListBox Height="140" HorizontalAlignment="Left" Margin="70,150,0,0" Name="listBoxSetting" 
     VerticalAlignment="Top" Width="360" SelectedIndex="{Binding Source={StaticResource appSettings}, Path=ListBoxSetting, Mode=TwoWay}"> 

       <ListBoxItem Content="Times New Roman" FontSize="24" FontFamily="Times New Roman" /> 
       <ListBoxItem Content="Arial" FontSize="24" FontFamily="Arial" /> 
       <ListBoxItem Content="Comic Sans MS" FontSize="24" FontFamily="Comic Sans MS" /> 
      </ListBox> 

      <RadioButton Content="Choice One" Height="Auto" HorizontalAlignment="Left" Margin="60,0,0,235" Name="radioButton1" VerticalAlignment="Bottom" GroupName="GroupOne" IsChecked="{Binding Source={StaticResource appSettings}, Path=RadioButton1Setting, Mode=TwoWay}" /> 
      <RadioButton Content="Choice Two" Height="Auto" HorizontalAlignment="Left" Margin="60,350,0,0" Name="radioButton2" VerticalAlignment="Top" GroupName="GroupOne" IsChecked="{Binding Source={StaticResource appSettings}, Path=RadioButton2Setting, Mode=TwoWay}"/> 
      <RadioButton Content="Choice Three" Height="Auto" HorizontalAlignment="Left" Margin="60,400,0,0" Name="radioButton3" VerticalAlignment="Top" GroupName="GroupOne" IsChecked="{Binding Source={StaticResource appSettings}, Path=RadioButton3Setting, Mode=TwoWay}"/> 
     </Grid> 

    </Grid> 



</phone:PhoneApplicationPage> 

그리고 Page1.xaml.cs :

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Animation; 
using System.Windows.Shapes; 
using Microsoft.Phone.Controls; 
using System.IO.IsolatedStorage; 
using System.Diagnostics; 



namespace Schedule 
{ 
    public partial class Page1 : PhoneApplicationPage 
    { 
     // Our settings 
     IsolatedStorageSettings settings; 

     // The key names of our settings 
     const string CheckBoxSettingKeyName = "CheckBoxSetting"; 
     const string ListBoxSettingKeyName = "ListBoxSetting"; 
     const string RadioButton1SettingKeyName = "RadioButton1Setting"; 
     const string RadioButton2SettingKeyName = "RadioButton2Setting"; 
     const string RadioButton3SettingKeyName = "RadioButton3Setting"; 
     const string UsernameSettingKeyName = "UsernameSetting"; 
     const string PasswordSettingKeyName = "PasswordSetting"; 

     // The default value of our settings 
     const bool CheckBoxSettingDefault = true; 
     const int ListBoxSettingDefault = 0; 
     const bool RadioButton1SettingDefault = true; 
     const bool RadioButton2SettingDefault = false; 
     const bool RadioButton3SettingDefault = false; 
     const string UsernameSettingDefault = ""; 
     const string PasswordSettingDefault = ""; 

     /// <summary> 
     /// Constructor that gets the application settings. 
     /// </summary> 
     public Page1() 
     { 
      InitializeComponent(); 

      // Get the settings for this application. 
      try 
      { 


        settings = IsolatedStorageSettings.ApplicationSettings; 


      } 
      catch(System.IO.IsolatedStorage.IsolatedStorageException e) 
      { 
       MessageBox.Show(e.ToString()); 
      } 

     } 

     /// <summary> 
     /// Update a setting value for our application. If the setting does not 
     /// exist, then add the setting. 
     /// </summary> 
     /// <param name="Key"></param> 
     /// <param name="value"></param> 
     /// <returns></returns> 
     public bool AddOrUpdateValue(string Key, Object value) 
     { 
      bool valueChanged = false; 

      // If the key exists 
      if (settings.Contains(Key)) 
      { 
       // If the value has changed 
       if (settings[Key] != value) 
       { 
        // Store the new value 
        settings[Key] = value; 
        valueChanged = true; 
       } 
      } 
      // Otherwise create the key. 
      else 
      { 
       settings.Add(Key, value); 
       valueChanged = true; 
      } 
      return valueChanged; 
     } 

     /// <summary> 
     /// Get the current value of the setting, or if it is not found, set the 
     /// setting to the default setting. 
     /// </summary> 
     /// <typeparam name="T"></typeparam> 
     /// <param name="Key"></param> 
     /// <param name="defaultValue"></param> 
     /// <returns></returns> 
     public T GetValueOrDefault<T>(string Key, T defaultValue) 
     { 
      T value; 

      // If the key exists, retrieve the value. 
      if (settings.Contains(Key)) 
      { 
       value = (T)settings[Key]; 
      } 
      // Otherwise, use the default value. 
      else 
      { 
       value = defaultValue; 
      } 
      return value; 
     } 

     /// <summary> 
     /// Save the settings. 
     /// </summary> 
     public void Save() 
     { 
      settings.Save(); 
     } 


     /// <summary> 
     /// Property to get and set a CheckBox Setting Key. 
     /// </summary> 
     public bool CheckBoxSetting 
     { 
      get 
      { 
       return GetValueOrDefault<bool>(CheckBoxSettingKeyName, CheckBoxSettingDefault); 
      } 
      set 
      { 
       if (AddOrUpdateValue(CheckBoxSettingKeyName, value)) 
       { 
        Save(); 
       } 
      } 
     } 


     /// <summary> 
     /// Property to get and set a ListBox Setting Key. 
     /// </summary> 
     public int ListBoxSetting 
     { 
      get 
      { 
       return GetValueOrDefault<int>(ListBoxSettingKeyName, ListBoxSettingDefault); 
      } 
      set 
      { 
       if (AddOrUpdateValue(ListBoxSettingKeyName, value)) 
       { 
        Save(); 
       } 
      } 
     } 


     /// <summary> 
     /// Property to get and set a RadioButton Setting Key. 
     /// </summary> 
     public bool RadioButton1Setting 
     { 
      get 
      { 
       return GetValueOrDefault<bool>(RadioButton1SettingKeyName, RadioButton1SettingDefault); 
      } 
      set 
      { 
       if (AddOrUpdateValue(RadioButton1SettingKeyName, value)) 
       {  
        Save(); 
       } 
      } 
     } 


     /// <summary> 
     /// Property to get and set a RadioButton Setting Key. 
     /// </summary> 
     public bool RadioButton2Setting 
     { 
      get 
      { 
       return GetValueOrDefault<bool>(RadioButton2SettingKeyName, RadioButton2SettingDefault); 
      } 
      set 
      { 
       if (AddOrUpdateValue(RadioButton2SettingKeyName, value)) 
       { 
        Save(); 
       } 
      } 
     } 

     /// <summary> 
     /// Property to get and set a RadioButton Setting Key. 
     /// </summary> 
     public bool RadioButton3Setting 
     { 
      get 
      { 
       return GetValueOrDefault<bool>(RadioButton3SettingKeyName, RadioButton3SettingDefault); 
      } 
      set 
      { 
       if (AddOrUpdateValue(RadioButton3SettingKeyName, value)) 
       { 
        Save(); 
       } 
      } 
     } 

     /// <summary> 
     /// Property to get and set a Username Setting Key. 
     /// </summary> 
     public string UsernameSetting 
     { 
      get 
      { 
       return GetValueOrDefault<string>(UsernameSettingKeyName, UsernameSettingDefault); 
      } 
      set 
      { 
       if (AddOrUpdateValue(UsernameSettingKeyName, value)) 
       { 
        Save(); 
       } 
      } 
     } 

     /// <summary> 
     /// Property to get and set a Password Setting Key. 
     /// </summary> 
     public string PasswordSetting 
     { 
      get 
      { 
       return GetValueOrDefault<string>(PasswordSettingKeyName, PasswordSettingDefault); 
      } 
      set 
      { 
       if (AddOrUpdateValue(PasswordSettingKeyName, value)) 
       { 
        Save(); 
       } 
      } 

    } 
    } 
} 

나는 매우 행복 할 것 있나요 어떤 도움. 감사합니다. .

답변

1

local:Page1 대신 MSDN 샘플에 AppSettings이라는 별개의 클래스를 사용해야합니다.

귀하의 경우, Page1의 인스턴스를 XAML 중 ... Page1! 따라서 런타임에서 Page1을 만들 때 XAML을 구문 분석하고이 코드 줄을 찾아 새 Page1 인스턴스를 만들고 차례로 Page1 인스턴스를 만듭니다.

+0

고마워요. 나는 내가 간단한 것을 놓친다는 것을 알고 있었다 :) – Oeldin

관련 문제