📜  Windows10开发人员-连接体验

📅  最后修改于: 2020-11-18 10:13:32             🧑  作者: Mango


众所周知,在Windows 10中,我们可以创建一个可以在多个Windows 10设备上执行并运行的应用程序。让我们假设我们拥有这些不同的设备,并且即使它运行在不同的设备上,我们也要使它看起来像是一个应用程序。

在通用Windows平台(UWP)中,您可以在所有Windows 10设备上运行一个应用程序,并且可以使用户感觉它是一个应用程序。这就是所谓的连接体验

连接体验的重要功能-

  • Windows 10是迈向更多个人计算时代的第一步,在此时代,您的应用程序,服务和内容可以在设备之间无缝,轻松地移动。

  • 借助连接的经验,您可以轻松共享与该应用程序相关的数据和个人设置,并且在所有设备上都可以使用。

在本章中,我们将学习-

  • 这些共享数据或设置将存储在哪里,以便可以在您的设备上用于该应用程序。

  • 如何识别用户;在不同设备上使用同一应用程序的是同一用户。

Windows 10向前迈出了大胆的一步。当您使用Microsoft帐户(MSA)或您的企业或(工作)帐户登录Windows 10时,假定-

  • 您可以免费访问OneDrive for MSA帐户,还可以访问Active Directory(AD)和Azure Active Directory(AAD),后者是企业帐户的云版本。

  • 您可以访问不同的应用程序和资源。

  • 设备和应用程序处于漫游状态和设置。

Windows 10设备

在Windows 10中漫游

登录到PC时,您可以设置一些首选项,例如锁定屏幕或背景色,或个性化各种设置。如果您有多台计算机或设备在Windows 10上运行,则当您使用同一帐户登录其他设备时,一台设备上的首选项和设置将从云同步。

在Windows 10中,当您设置了应用程序设置或对其进行了个性化设置后,这些设置将通过UWP中提供的漫游API进行漫游。当您在其他设备上再次运行同一应用程序时,它将首先检索设置并将这些设置应用到该设备上的应用程序。

个性化设置

将漫游数据上传到云的最大限制为100KB。如果超过此限制,则同步将停止,并且将像本地文件夹一样运行。

RoamingSettings API作为字典公开,应用程序可以在其中保存数据。

Windows.Storage.ApplicationDataContainer roamingSettings = 
   Windows.Storage.ApplicationData.Current.RoamingSettings;  
                   
// Retrivve value from RoamingSettings 
var colorName = roamingSettings.Values["PreferredBgColor"].ToString(); 
 
// Set values to RoamingSettings 
roamingSettings.Values["PreferredBgColor"] = "Green";

RoamingSettings中的数据发生更改时,它将触发DataChanged事件,您可以在其中刷新设置。

Windows.Storage.ApplicationData.Current.DataChanged += RoamingDataChanged;  

private void RoamingDataChanged(Windows.Storage.ApplicationData sender, object args) {
   // Something has changed in the roaming data or settings 
}

让我们看一个示例,在该示例中,我们将设置应用程序的背景色,并且这些设置将通过UWP中提供的漫游API进行漫游。

下面给出的是XAML代码,其中添加了不同的控件。


   
   
       
          
          
      
        
       
          
      
        
       
          
             
                    
             
                    
             
          
       
        
    
    
             

下面给出了RoamingSettings和其他事件的C#实现。

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Runtime.InteropServices.WindowsRuntime; 

using Windows.Foundation; 
using Windows.Foundation.Collections; 

using Windows.UI; 
using Windows.UI.Xaml; 
using Windows.UI.Xaml.Controls; 
using Windows.UI.Xaml.Controls.Primitives; 
using Windows.UI.Xaml.Data; 
using Windows.UI.Xaml.Input; 
using Windows.UI.Xaml.Media; 
using Windows.UI.Xaml.Navigation;  

// The RoamingSettingsDemo Page item template is documented at 
   http://go.microsoft.com/fwlink/?LinkId=234238  

namespace RoamingSettingsDemo.Views {

   /// 
      /// An empty page that can be used on its own or navigated to within a Frame. 
   ///  
    
   public sealed partial class MainPage : Page {
   
      public MainPage() {
         this.InitializeComponent(); 
      }  
        
      protected override void OnNavigatedTo(NavigationEventArgs e) {
         SetBackgroundFromSettings();  
         Windows.Storage.ApplicationData.Current.DataChanged += RoamingDataChanged; 
      }  
        
      protected override void OnNavigatedFrom(NavigationEventArgs e) {
         Windows.Storage.ApplicationData.Current.DataChanged -= RoamingDataChanged; 
      }  
        
      private void RoamingDataChanged(Windows.Storage.ApplicationData sender, object args) {
      
         // Something has changed in the roaming data or settings 
         var ignore = Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,  
            () ⇒ SetBackgroundFromSettings()); 
      } 
        
      private void SetBackgroundFromSettings() {
      
         // Get the roaming settings 
         Windows.Storage.ApplicationDataContainer roamingSettings = 
            Windows.Storage.ApplicationData.Current.RoamingSettings;  
                   
         if (roamingSettings.Values.ContainsKey("PreferBrownBgColor")) {
            var colorName = roamingSettings.Values["PreferBrownBgColor"].ToString();
                
            if (colorName == "Gray") {
               MainGrid.Background = new SolidColorBrush(Colors.Gray); 
               GrayRadioButton.IsChecked = true; 
            } else if (colorName == "Brown") {
               MainGrid.Background = new SolidColorBrush(Colors.Brown); 
               BrownRadioButton.IsChecked = true; 
            } 
         } 
            
      } 
        
      private void radioButton_Checked(object sender, RoutedEventArgs e){ 
         if (GrayRadioButton.IsChecked.HasValue && 
            (GrayRadioButton.IsChecked.Value == true)) {
               Windows.Storage.ApplicationData.Current.RoamingSettings.
                  Values["PreferBrownBgCo lor"] = "Gray"; 
         } else {
            Windows.Storage.ApplicationData.Current.RoamingSettings.
               Values["PreferBrownBgCo lor"] = "Brown"; 
         }  
            
         SetBackgroundFromSettings(); 
      } 
        
   } 
}         

编译并执行上述代码后,您将看到以下窗口。

内容体验执行

让我们选择灰色作为背景色,然后关闭此应用程序。

现在,当您在此设备或任何其他设备上运行此应用程序时,您会看到背景颜色已变为灰色。这表明该应用程序已成功检索RoamingSettings中的背景颜色更改信息。

内容体验演示