繁体   English   中英

我如何处理自定义应用程序设置? Windows 10 UWP C#

[英]How can i handle custom app settings ? Windows 10 UWP c#

我正在开发基于Webview的应用程序。 Webview是我的应用程序的核心,位于主页上。 我想让用户能够自定义应用程序。 例如:我在主页上有splitview。 splitview的默认显示模式是compactoverlay,如果用户设备是电话,它将自动更改为叠加。 我想为用户更改此选择。 我为此做了一些工作,但是效率不高。 谁能告诉我该如何处理我的应用程序设置?

public sealed partial class MainPage : Page
{
    public MainPage()
    {

        this.InitializeComponent();
        SettingsReader();
        ApplyUserSettings();
        NavigationCacheMode = NavigationCacheMode.Enabled;

        SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible;
        SystemNavigationManager.GetForCurrentView().BackRequested += (s, a) =>
        {


            if (webView.CanGoBack)
            {
                webView.GoBack();
                a.Handled = true;
            }

            SettingsReader();
            ApplyUserSettings();
        };
    }



    private async void SettingsReader()
    {
        try
        {
            await ReadFileSwitchSplitDisplayMode();
        }
        catch (Exception)
        {

        }

    }

    private void ApplyUserSettings()
    {
        if (tbxSwitchSplitDisplayMode.Text == "1")
        {

            ShellSplitView.DisplayMode = SplitViewDisplayMode.Overlay;
            mainpageAppBarGrid.Margin = new Thickness(48, 0, 0, 0);
        }
        else ShellSplitView.DisplayMode = SplitViewDisplayMode.CompactOverlay;
    }

设定页面

public sealed partial class Settings : Page
{

    public Settings()
    {
        InitializeComponent();
        //NavigationCacheMode = NavigationCacheMode.Enabled;
        SettingsReader();
        tglSwitchSplitDisplayModeCheck();

    }

    private async void SettingsReader()
    {
        try
        {
            await ReadFileSwitchSplitDisplayMode();
        }
        catch (Exception)
        {


        }

    }



    private async void btnKaydet_Click(object sender, RoutedEventArgs e)
    {
        await WriteToFile();
        await WriteToFileSwitchSplitDisplayMode();

        //Show Success Message
        var dlg = new MessageDialog("Kaydedilen ayarların tamamının uygulanması için uygulamanın sizin tarafınızdan yeniden başlatılması gerekiyor. Şimdi kapatılsın mı ?","Ayarlar Kaydedildi!");
        dlg.Commands.Add(new UICommand("Evet", null, "YES"));
        dlg.Commands.Add(new UICommand("Hayır", null, "NO"));
        var op = await dlg.ShowAsync();
        if ((string)op.Id == "YES")
        {
            App.Current.Exit();
        }
    }






        }

    }



    private void tglSwitchSplitDisplayModeCheck()
    {
        if (tbxSwitchSplitDisplayMode.Text == "1")
        {
            tglSwitchSplitDisplayMode.IsOn = true;
        }
        else
            tglSwitchSplitDisplayMode.IsOn = false;
    }

    public async Task WriteToFileSwitchSplitDisplayMode()
    {
        // Get the text data from the textbox
        byte[] fileBytes = System.Text.Encoding.UTF8.GetBytes(tbxSwitchSplitDisplayMode.Text.ToCharArray());

        //Get the local folder
        StorageFolder local = ApplicationData.Current.LocalFolder;

        //Create new folder name DataFolder
        var dataFolder = await local.CreateFolderAsync("Data Folder", CreationCollisionOption.OpenIfExists);

        //Create txt file
        var file = await dataFolder.CreateFileAsync("tglSwitchSplitDisplayMode.txt", CreationCollisionOption.ReplaceExisting);

        //write the data from the text box
        using (var s = await file.OpenStreamForWriteAsync())
        {
            s.Write(fileBytes, 0, fileBytes.Length);
        }

    }

    public async Task ReadFileSwitchSplitDisplayMode()
    {
        // Get the local folder.
        StorageFolder local = ApplicationData.Current.LocalFolder;

        if (local != null)
        {
            // Get the DataFolder folder.
            var dataFolder = await local.GetFolderAsync("Data Folder");

            // Get the file.
            var file = await dataFolder.OpenStreamForReadAsync("tglSwitchSplitDisplayMode.txt");

            // Read the data.
            using (StreamReader streamReader = new StreamReader(file))
            {
                tbxSwitchSplitDisplayMode.Text = streamReader.ReadToEnd();
            }

        }
    }

    private void tglSwitchSplitDisplayMode_Toggled(object sender, RoutedEventArgs e)
    {
        if (tglSwitchSplitDisplayMode.IsOn)
        {
            tbxSwitchSplitDisplayMode.Text = "1";
        }
        else tbxSwitchSplitDisplayMode.Text = "0";
    }
}

在此处输入图片说明 结果,它现在仅在用户退出应用并重新启动时才起作用。 但是,此技巧不适用于Windows Phone 10。

对于您的方案,有不同的解决方案:

1)如果您要基于某些系统设置来修改UI,我同意ApplicationData.LocalSetting API是好的。 您可以在此处找到说明。

2)根据您的描述,使UI适应不同设备似乎更加方便。 在这种情况下,有关自适应UI的XAML功能可能更适合您。 在这里,您可以找到有关自适应UI开发的教程。 在这里您可以找到样本。

请告诉我这是否有帮助。

我做的。

SettingsPage

private async void tglSwitchSplitDisplayMode_Toggled(object sender, RoutedEventArgs e)
    {

        StorageFolder local = ApplicationData.Current.LocalFolder;
        var dataFolder = await local.CreateFolderAsync("Data Folder", CreationCollisionOption.OpenIfExists);
        var file = await dataFolder.CreateFileAsync("SwitchSplitDisplayMode.txt", CreationCollisionOption.ReplaceExisting);

        if (tglSwitchSplitDisplayMode.IsOn)
        { 
            await FileIO.WriteTextAsync(file,"on");
        }
        else await FileIO.WriteTextAsync(file, "off");


    }

主页

private async void ApplyUserSettings()
    {
        try
        {
            StorageFolder local = ApplicationData.Current.LocalFolder;

            var dataFolder = await local.GetFolderAsync("Data Folder");
            var file = await dataFolder.GetFileAsync("SwitchSplitDisplayMode.txt");
            String SwitchSplitDisplayMode = await FileIO.ReadTextAsync(file);

            if (SwitchSplitDisplayMode == "on")
            {
                ShellSplitView.DisplayMode = SplitViewDisplayMode.Overlay;
                mainpageAppBarGrid.Margin = new Thickness(48, 0, 0, 0);
            }
            else ShellSplitView.DisplayMode = SplitViewDisplayMode.CompactOverlay;
        }
        catch (Exception)
        {

        }

    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM