قبل از خواندن این مقاله، خواندن قسمت های قبلی مجموعه را به شدت توصیه می کنم.
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن (کنترل دکمه)
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن (Stackpanel)
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن (CheckBox)
- آموزش برنامه نویسی جهانی ویندوز از طریق C++ مدرن (رادیو دکمه)
- آموزش برنامه نویسی جهانی ویندوز از طریق C++ مدرن (Combobox)
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن (Border)
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن (CommandBar)
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن (کنترل SplitView)
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن (AutoSuggestBox)
در این مقاله قصد داریم با ContentDialog در C++ مدرن آشنا شویم
ContentDialog برای ایجاد یک گفتگوی Modal تعریف شده توسط کاربر استفاده می شود
دیالوگ مودال
کاربر را مجبور می کند تا ورودی (چه موفقیت یا شکست) را دریافت کند تا زمانی که کاربر نتواند با ویندوز والدین تعامل داشته باشد. گفتگوی مودال دیالوگ کودک نامیده می شود.
Example
VS - Account Settings، سپس وارد گفتگوی کلید محصول (Modal Dialog) شوید، بدون اینکه این گفتگو را ببندید. کاربر نمی تواند با گفتگوی والد تعامل داشته باشد.
ContentDialog
ContentDialog یک گفتگوی مودال است که دارای عنوان، محتوا، سه دکمه پیش فرض، دکمه های اولیه، ثانویه و بستن است. این گفتگو کاملاً قابل تنظیم است، مانند تمام ویژگی هایی که می توانیم کنترل یا سبک های خود را اختصاص دهیم
- ContentDialog cDlg;
- cDlg.Title(CreateInspectable(L"Content Dialog"));
- cDlg.Content(CreateInspectable(L"C++/WinRT UWP Content Dialog"));
- cDlg.PrimaryButtonText(L"Primary Button");
- cDlg.SecondaryButtonText(L"Secondary Button");
- cDlg.CloseButtonText(L"Close Button");
نمایش ContentDialog
دیالوگ را با استفاده از تابع ShowAsync نشان دهید.
- cDlg.ShowAsync();
ContentDialogResult
ContentDialog ContentDialogResult را به عنوان مقدار بازگشتی برمی گرداند
- auto Result = co_await cDlg.ShowAsync();
- ContentDialogResult::Primary -> primary button has clicked
- ContentDialogResult::Secondary -> Secondary button has clicked
- ContentDialogResult::None -> Close button has clicked
برای نمایش محاوره محتوا در تمام صفحه استفاده می شود. منبع نمونه کامل برای مدیریت ContentDialog
- #include "pch.h"
- using namespace winrt;
- using namespace Windows::ApplicationModel;
- using namespace Windows::ApplicationModel::Activation;
- using namespace Windows::Foundation;
- using namespace Windows::UI;
- using namespace Windows::UI::Xaml;
- using namespace Windows::UI::Xaml::Controls;
- using namespace Windows::UI::Xaml::Controls::Primitives;
- using namespace Windows::UI::Xaml::Interop;
- using namespace Windows::UI::Xaml::Media;
- using namespace Windows::UI::Xaml::Navigation;
- using namespace Windows::UI::Popups;
- using namespace Windows::Storage;
- struct App :ApplicationT<App>
- {
- TextBlock txtStatus;
- IInspectable CreateInspectable(hstring strCaption)
- {
- return PropertyValue::CreateString(strCaption);
- }
- fire_and_forget BtnClick(IInspectable const & sender, const RoutedEventArgs &args)
- {
- ContentDialog cDlg;
- cDlg.Title(CreateInspectable(L"Content Dialog"));
- cDlg.Content(CreateInspectable(L"C++/WinRT UWP Content Dialog"));
- cDlg.PrimaryButtonText(L"Primary Button");
- cDlg.SecondaryButtonText(L"Secondary Button");
- cDlg.CloseButtonText(L"Close Button");
- cDlg.FullSizeDesired(true);
- auto Result = co_await cDlg.ShowAsync();
- switch (Result)
- {
- case ContentDialogResult::Primary:
- txtStatus.Text(L"Primary Clicked");
- break;
- case ContentDialogResult::Secondary:
- txtStatus.Text(L"Secondary Clicked");
- break;
- case ContentDialogResult::None:
- txtStatus.Text(L"None Clicked");
- break;
- default:
- break;
- }
- }
- TextBlock CreateTextBlock(hstring text)
- {
- TextBlock txtBlock;
- txtBlock.Text(text);
- txtBlock.FontFamily(FontFamily(L"Segoe UI Semibold"));
- txtBlock.TextAlignment(TextAlignment::Left);
- txtBlock.FontSize(35);
- txtBlock.Foreground(SolidColorBrush(Colors::Brown()));
- txtBlock.Margin(CreateThickness(10, 10, 0, 0));
- return txtBlock;
- }
- Thickness CreateThickness(int left, int top, int right, int bottom)
- {
- Thickness thick;
- thick.Left = left;
- thick.Top = top;
- thick.Right = right;
- thick.Bottom = bottom;
- return thick;
- }
- void OnLaunched(LaunchActivatedEventArgs const&)
- {
- Button BtnClick;
- auto captionText = PropertyValue::CreateString(L"Content Dialog");
- BtnClick.Content(captionText);
- BtnClick.Click({ this,&App::BtnClick });
- BtnClick.Margin(CreateThickness(20, 10, 0, 0));
- Button BtnCustomClick;
- auto customCaptionText = PropertyValue::CreateString(L"Custom Content Dialog");
- txtStatus = CreateTextBlock(L"Content Status");
- txtStatus.Margin(CreateThickness(20, 10, 0, 0));
- StackPanel sStatusPanel;
- sStatusPanel.Children().Append(txtStatus);
- StackPanel sContentPanel;
- sContentPanel.Children().Append(BtnClick);
- sContentPanel.Orientation(Orientation::Horizontal);
- sContentPanel.VerticalAlignment(VerticalAlignment::Top);
- StackPanel mainPanel;
- mainPanel.Children().Append(sContentPanel);
- mainPanel.Children().Append(sStatusPanel);
- Window window = Window::Current();
- window.Content(mainPanel);
- window.Activate();
- auto txtNo = CreateTextBlock(L"Welcome");
- }
- };
- int __stdcall wWinMain(HINSTANCE, HINSTANCE, PWSTR, int)
- {
- Application::Start([](auto &&) {make<App>(); });
- return 0;
- }
تا کنون ContentDialog را دیدهایم، اکنون میخواهم نحوه سفارشیسازی محاوره محتوا را توضیح دهم.
ویژگی محتوای ContentDialog برای سفارشی کردن ناحیه محتوای گفتگو استفاده می شود، این ویژگی مانند یک کنترل ظرف است، کنترل هایی را که می خواهید استفاده کنید آماده کنید، لیست را آماده کنید و آن را به کنترل پانل اضافه کنید، در نهایت کنترل پانل را به ویژگی محتوا اختصاص دهید.
مثال: کد نمونه زیر متن هدر را آماده می کند و دو چک باکس به ContentDialog اضافه می شود