0

ここにいくつかの設定のための私のコードがあります

if (settings.Contains("dynamicOn"))
        {
            // Commenting out because we're trying a different way
            // DynamicCheck.IsChecked = (bool)settings["dynamicOn"];
            dynamicToggle.IsChecked = (bool)settings["dynamicOn"];
            AllPacks.IsChecked = (bool)settings["changeAllPacks"];
        }

そして、これがその背後にあるXAMLです

 <toolkit:ToggleSwitch x:Name="dynamicToggle" Header="Dynamically Update Lockscreen?" Margin="0,112,0,-112" SwitchForeground="White" Checked="DynamicCheck_Checked_1" Unchecked="DynamicCheck_Unchecked">
                        <toolkit:ToggleSwitch.HeaderTemplate>
                            <DataTemplate>
                                <ContentControl Content="{Binding}"/>
                            </DataTemplate>
                        </toolkit:ToggleSwitch.HeaderTemplate>
                    </toolkit:ToggleSwitch>
                    <CheckBox x:Name="AllPacks" Content="All Packs" Checked="AllPacks_Checked" Unchecked="AllPacks_Unchecked" Margin="50,174,0,0" Visibility="Collapsed"/>

これで、XAML と ToggleSwitch が正常に動作するようになりました。すべてが機能します。実際に設定ページを開こうとすると (CheckBox がなくても問題なく開きますが、それで開くことを拒否します)、このエラーが発生します。

A first chance exception of type 'System.Collections.Generic.KeyNotFoundException' occurred in mscorlib.ni.dll The program '[3048] TaskHost.exe' has exited with code -1 (0xffffffff).

誰もこれを見たことがありますか?Bing を検索しても、何もないようです。どんな助けでも大歓迎です!

ありがとう、パトリック

編集:コードをこれに変更しました

if (settings.Contains("dynamicOn"))
        {
            // Commenting out because we're trying a different way
            // DynamicCheck.IsChecked = (bool)settings["dynamicOn"];
            AllPacks.IsChecked = (bool)settings["changeAllPacks"];
            dynamicToggle.IsChecked = (bool)settings["dynamicOn"];
        }
        else
        {
            // Commenting out because we're trying a different way
            // DynamicCheck.IsChecked = true;
            // isEnabledText.Visibility = Visibility.Visible;
            // settings.Add("dynamicOn", true);
            dynamicToggle.IsChecked = true;
            AllPacks.IsChecked = true;
            AllPacks.Visibility = Visibility.Visible;
            settings.Add("changeAllPacks", true);
            settings.Add("dynamicOn", true);
        }

そして今、それは

settings.Add("dynamicOn", true);

また、エラーも次のように変更されました

A first chance exception of type 'System.ArgumentException' occurred in mscorlib.ni.dll

だから、これはIsolatedStorageの問題かもしれないと思い始めていますか?

4

3 に答える 3

1

settingsが含まれていることを確認していますがdynamicOn、 はどうですかchangeAllPacks。おそらくその設定が定義されていないため、エラーが発生しています。

于 2013-08-26T19:25:48.460 に答える
0

何が起こったのか正確にはわかりません..しかし、どういうわけか問題は自然に解決したように見えました..とにかく、すべての助けに感謝します!

于 2013-08-27T16:24:07.993 に答える
0

「設定」はどのように定義されていますか? アプリケーション設定を保存しようとしている場合は、代わりに IsolatedStoragSettings.ApplicationSettings を使用してみてください。私はそれを使用しており、実際には SettingsManager クラスに任意の値を取得および設定するためのヘルパー メソッドがあります。(私の設定はフォアグラウンド タスクとバックグラウンド タスクの両方からアクセスされ、競合が発生しないようにするため、Mutex コードはそこにあります。)

デフォルト値を使用すると、最初に値が存在するかどうかを確認する必要がないため、コードが簡単になります。

public static T GetSetting<T>(string settingKey, T defaultValue)
{
    Mutex mutex = new Mutex(false, "MyAppSettingsLock");
    mutex.WaitOne();

    T result;
    if (IsolatedStorageSettings.ApplicationSettings.Contains(settingKey))
        result = (T)IsolatedStorageSettings.ApplicationSettings[settingKey];
    else
        result = defaultValue;

    mutex.ReleaseMutex();

    return result;
}

public static void SetSetting<T>(string settingKey, T value)
{
    Mutex mutex = new Mutex(false, "MyAppSettingsLock");
    mutex.WaitOne();

    IsolatedStorageSettings.ApplicationSettings[settingKey] = value;
    IsolatedStorageSettings.ApplicationSettings.Save();

    mutex.ReleaseMutex();
}
于 2013-08-27T01:53:44.853 に答える