Fichier CodeBehind File (C++ ou C#)
Le fichier CodeBehind sera généralement écrit dans C++ ou C# et contiendra le traitement pur les événements qui sont déclenchés danbs la fenêtre d'appli UWP. De tels événements seraient, par exemple :
•Charger une solution MobileTogether dans le contrôle SolutionView
•Ouvrir une nouvelle fenêtre popup d'appli UWP et charger une solution MobileTogether dans la fenêtre
•Exécuter un processus quand un événement de contrôle est déclenché
•Envoyer un message à MobileTogether Server (par le biais du mécanisme EmbeddedMessage)
•Traiter un message qui a été reçu de MobileTogether Server
Exécuter la solution depuis le code
Vous pouvez spécifier les attributs nécessaires pour exécuter une solution dans le fichier XAML lui-même. Alternativement, vous pouvez exécuter une solution du fichier CodeBehind, comme suit :
Par exemple, vous pouvez instancier un contrôle SolutionView dans le fichier XAML avec un nom, comme suit :
<mobiletogether:SolutionView Name="x:MySolutionView" />
Vous pouvez exécuter la solution depuis le code comme suit :
mySolutionView.ServerURL = "demo.mobiletogether.com";
mySolutionView.Port = "443";
mySolutionView.UseSSL = true;
mySolutionView.User = "";
mySolutionView.Password = "";
mySolutionView.SolutionURL = "/pulic/MyCollections?Par1=123&Par2=456";
await mySolutionView.StartSolution();
Dans le code, les actions suivantes peuvent être effectuées par le biais des méthodes correspondantes recensées ci-dessous :
Page submit: mySolutionView.Submit();
Page refresh: mySolutionView.Refresh();
Go back: mySolutionView.GoBack();
Stop the solution: mySolutionView.StopSolution();
Suspend the solution: mySolutionView.SuspendSolution();
Access the solution's local storage: mySolutionView.GetSolutionLocalFolder();
Veuillez noter les points suivants :
•La méthode SolutionURL peut prendre les paramètres d'entrée de la solution.
•Quand la solution est terminée ou fermée, l'événement SolutionFinished est déclenché. Vous pouvez utiliser cet événement, par exemple, pour fermer la fenêtre d'appli UWP après que la solution se termine.
•La communication depuis la solution est réalisée en écrivant aux fichiers dans le stockage local de la solution ou dans tout autre dossier accessible, tel que les dossiers Musique, Vidéos et Photos.
•Alors qu'il est possible d'exécuter la même solution dans deux contrôles SolutionView séparés sur la même page, vous pourriez rencontrer des difficultés pour accéder aux mêmes ressources. Par exemple, vous pourriez rencontrer des difficultés si vous tentez d'accéder à un fichier dans un contrôle SolutionView alors que vous essayer de le supprimer dans un autre.
Listes de codes
Les fragments de code C++ derrière notre exemple d'appli UWP (MainPage.xaml.cpp) et la fenêtre d'appli UWP dans l'exemple popup (PopupSolutionPage.xaml.cpp) sont recensés ci-dessous. Ils fournissent la structure à grande échelle des exigences de code et contiendraient le traitement pour les fonctions clés de l'appli. Consultez ces extraits de code pour savoir comment définir le code pour traiter les événements de votre appli UWP.
// // MainPage.xaml.cpp // Implementation of the MainPage class. //
#include "pch.h" #include "MainPage.xaml.h" #include "PopupSolutionPage.xaml.h"
using namespace MobileTogetherEmbeddingDemoCpp;
using namespace Platform; using namespace Windows::Foundation; using namespace Windows::Foundation::Collections; using namespace Windows::UI::Xaml; using namespace Windows::UI::Xaml::Controls; using namespace Windows::UI::Xaml::Controls::Primitives; using namespace Windows::UI::Xaml::Data; using namespace Windows::UI::Xaml::Input; using namespace Windows::UI::Xaml::Media; using namespace Windows::UI::Xaml::Navigation; using namespace Windows::Storage;
// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409
MainPage::MainPage() { InitializeComponent(); }
void MainPage::SolutionViewRight_SolutionFinished( Platform::Object^ sender, MobileTogether::SolutionFinishedEventArgs^ e ) { auto dialog = ref new Windows::UI::Popups::MessageDialog( "Right Solution Finished" ); dialog->ShowAsync(); }
void MainPage::SolutionViewLeft_SolutionFinished( Platform::Object^ sender, MobileTogether::SolutionFinishedEventArgs^ e ) { auto dialog = ref new Windows::UI::Popups::MessageDialog( "Left Solution Finished" ); dialog->ShowAsync(); }
void MainPage::MtSolutionInNewWindowRun_Click( Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e ) { SaveSettings(); auto sServer = mtServer->Text; auto sPort = mtPort->Text; auto bSSL = mtSSl->IsChecked->Value; auto sUser = mtUser->Text; auto sPwd = mtPwd->Text; auto sSolutionURL = mtSolutionInNewWindowURL->Text; concurrency::create_task( Windows::UI::WindowManagement::AppWindow::TryCreateAsync() ). then( [=]( Windows::UI::WindowManagement::AppWindow ^ pWind ) { auto pPage = ref new PopupSolutionPage( sServer, sPort, bSSL, sUser, sPwd, sSolutionURL, pWind ); Windows::UI::Xaml::Hosting::ElementCompositionPreview::SetAppWindowContent( pWind, pPage ); return pWind->TryShowAsync(); }, concurrency::task_continuation_context::use_current() ); }
void MainPage::MtSolutionEmbeddedMsgSendLeft_Click( Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e ) { concurrency::create_task( SolutionViewLeft->ProcessEmbeddedMessageAsync( mtSolutionEmbeddedMsg->Text ) ).then( []() { // do something after solution processes the message } ); }
void MainPage::MtSolutionEmbeddedMsgSendRight_Click( Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e ) { concurrency::create_task( SolutionViewRight->ProcessEmbeddedMessageAsync( mtSolutionEmbeddedMsg->Text ) ).then( []() { // do something after solution processes the message } ); }
void MainPage::SolutionViewLeft_EmbeddedMessage( Platform::Object^ sender, MobileTogether::EmbeddedMessageEventArgs^ e ) { auto dialog = ref new Windows::UI::Popups::MessageDialog( e->Message, "Message From Solution Left" ); concurrency::create_task( dialog->ShowAsync() ). then( [pDeferal = e->GetDeferral()]( Windows::UI::Popups::IUICommand^ ) { // do some processing pDeferal->Complete(); }, concurrency::task_continuation_context::use_current() ); }
void MainPage::SolutionViewRight_EmbeddedMessage( Platform::Object ^sender, MobileTogether::EmbeddedMessageEventArgs ^e ) { auto dialog = ref new Windows::UI::Popups::MessageDialog( e->Message, "Message From Solution Right" ); concurrency::create_task( dialog->ShowAsync() ). then( [pDeferal = e->GetDeferral()]( Windows::UI::Popups::IUICommand^ ) { // do some processing pDeferal->Complete(); }, concurrency::task_continuation_context::use_current() ); }
void MainPage::MtSolutionURLLeftRun_Click( Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e ) { SaveSettings(); concurrency::create_task( SolutionViewLeft->StopSolutionAsync() ). then( [=]() { SolutionViewLeft->SolutionUrl = mtSolutionURLLeft->Text; return SolutionViewLeft->StartSolutionAsync( true ); }, concurrency::task_continuation_context::use_current() ); }
void MainPage::MtSolutionURLRightRun_Click( Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e ) { SaveSettings(); concurrency::create_task( SolutionViewRight->StopSolutionAsync() ). then( [=]() { SolutionViewRight->SolutionUrl = mtSolutionURLRight->Text; return SolutionViewRight->StartSolutionAsync( true ); }, concurrency::task_continuation_context::use_current() ); }
void MainPage::Page_Loaded( Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e ) { auto getSettings = []( Platform::String^ sName, Platform::String^ sDefault ) { if( auto localSettings = Windows::Storage::ApplicationData::Current->LocalSettings ) if( auto sValue = dynamic_cast<Platform::String^>(localSettings->Values->Lookup( sName )) ) return sValue; return sDefault; };
mtServer->Text = getSettings(L"Host", L"demo.mobiletogether.com"); mtPort->Text = getSettings(L"Port", L"443"); mtSSl->IsChecked = getSettings(L"SSL", L"true" ) == L"true"; mtUser->Text = getSettings(L"User", L""); mtPwd->Text = getSettings(L"Pwd", L"" ); mtSolutionInNewWindowURL->Text = getSettings(L"RunURLInNewWindow", L"/public/About" ); mtSolutionURLLeft->Text = getSettings(L"RunURLLeft", L"/public/BizBudget" ); mtSolutionURLRight->Text = getSettings(L"RunURLRight", L"/public/DateCalc" ); mtSolutionEmbeddedMsg->Text = getSettings( L"EmbeddedMessage", L"{ \"Name\": \"Altova\", \"City\": \"Vienna\", \"Country\": \"Austria\" }" ); }
void MainPage::SaveSettings() { if( auto localSettings = Windows::Storage::ApplicationData::Current->LocalSettings ) { localSettings->Values->Insert( L"Host", dynamic_cast<PropertyValue^>(PropertyValue::CreateString( mtServer->Text )) ); localSettings->Values->Insert( L"Port", dynamic_cast<PropertyValue^>(PropertyValue::CreateString( mtPort->Text )) ); localSettings->Values->Insert( L"SSL", dynamic_cast<PropertyValue^>(PropertyValue::CreateString( mtSSl->IsChecked->Value ? L"true" : L"false" )) ); localSettings->Values->Insert( L"User", dynamic_cast<PropertyValue^>(PropertyValue::CreateString( mtUser->Text )) ); localSettings->Values->Insert( L"Pwd", dynamic_cast<PropertyValue^>(PropertyValue::CreateString( mtPwd->Text )) ); localSettings->Values->Insert( L"RunURLInNewWindow", dynamic_cast<PropertyValue^>(PropertyValue::CreateString( mtSolutionInNewWindowURL->Text )) ); localSettings->Values->Insert( L"RunURLLeft", dynamic_cast<PropertyValue^>(PropertyValue::CreateString( mtSolutionURLLeft->Text )) ); localSettings->Values->Insert( L"RunURLRight", dynamic_cast<PropertyValue^>(PropertyValue::CreateString( mtSolutionURLRight->Text )) ); localSettings->Values->Insert( L"EmbeddedMessage", dynamic_cast<PropertyValue^>(PropertyValue::CreateString( mtSolutionEmbeddedMsg->Text )) ); } }
|
// // PopupSolutionPage.xaml.cpp // Implementation of the PopupSolutionPage class //
#include "pch.h" #include "PopupSolutionPage.xaml.h"
using namespace MobileTogetherEmbeddingDemoCpp;
using namespace Platform; using namespace Windows::Foundation; using namespace Windows::Foundation::Collections; using namespace Windows::UI::Xaml; using namespace Windows::UI::Xaml::Controls; using namespace Windows::UI::Xaml::Controls::Primitives; using namespace Windows::UI::Xaml::Data; using namespace Windows::UI::Xaml::Input; using namespace Windows::UI::Xaml::Media; using namespace Windows::UI::Xaml::Navigation;
// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238
PopupSolutionPage::PopupSolutionPage() { InitializeComponent(); }
PopupSolutionPage::PopupSolutionPage( Platform::String^ sHost, Platform::String^ sPort, bool bUseSSL, Platform::String^ sUser, Platform::String^ sPwd, Platform::String^ sSolutionPath, Windows::UI::WindowManagement::AppWindow ^ pAppWindow ) { InitializeComponent(); m_pAppWindow = pAppWindow; mtSolutionView->ServerURL = sHost; mtSolutionView->Port = sPort; mtSolutionView->UseSSL = bUseSSL; mtSolutionView->User = sUser; mtSolutionView->Password = sPwd; mtSolutionView->SolutionUrl = sSolutionPath; }
void PopupSolutionPage::SolutionView_SolutionFinished( Platform::Object^ sender, MobileTogether::SolutionFinishedEventArgs^ e ) { if( m_pAppWindow ) m_pAppWindow->CloseAsync(); else Window::Current->Close(); }
|