قبل از خواندن این مقاله، خواندن قسمت مقدمه را به شدت توصیه می کنم:
در این مقاله قصد داریم با کنترل دکمه در C++/UWP آشنا شویم.
کنترل دکمه
کنترل دکمه به کاربر اجازه می دهد تا اقداماتی را انجام دهد. آنها عمدتا دارای دو ویژگی، محتوا و رویداد کلیک هستند. ویژگی های محتوا برای تنظیم عنوان دکمه و رویداد کلیک برای راه اندازی رویداد استفاده می شود.
محتوا
ویژگی Content برای تنظیم عنوان دکمه استفاده می شود. ما نمیتوانیم متن را مستقیماً اختصاص دهیم (در VB یا C#، میتوانیم مستقیماً مقدار متن را اختصاص دهیم)، در عوض از رابط Inspectable برای اختصاص متن استفاده میکنیم.
قابل بازرسی
IInspectable رابط پایه برای تمام کلاس های زمان اجرا ویندوز است. این رابط برای نمایش ویژگیهای COM به زبانهای دیگر مانند C++، C#، JavaScript و غیره استفاده میشود. برای تبدیل رشته به IInspectable، باید از کلاس PropertyValue استفاده کنیم.
PropertyValue
PropertyValue برای تبدیل نوع داده (مانند string، int، float) به IInspectable استفاده می شود.
در اینجا کد نمونه ای است که متن محتوا را اختصاص می دهد.
رویداد کلیک کنید
کلیک روی دکمه در رویداد RoutedEventHandler انجام می شود و تابع RoutedEventHandler به عنوان آرگومان (تابع برگشت به تماس) ارسال می شود. RoutedEventHandler دارای دو پارامتر ورودی است، یکی Sender، پارامتر فرستنده IIinspectable و سپس RoutedEventHandler به عنوان آرگومان دوم .
سابق
- BtnClick.Click(&App::BtnClick);
- void App::BtnClick(IInspectable const & sender,const RoutedEventArgs &args)
- {
- }
در برنامه نمونه زیر، کاربر روی دکمه کلیک می کند و یک کادر پیام نمایش داده می شود.
- #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>
- {
- public:
- virtual ~App() = default;
- static void OnLaunched(LaunchActivatedEventArgs const&);
- static void BtnClick(IInspectable const & sender, const RoutedEventArgs &args);
- };
- void App::OnLaunched(LaunchActivatedEventArgs const&)
- {
- Button BtnClick;
- IInspectable captionText = PropertyValue::CreateString(L"Click Me");
- BtnClick.Content(captionText);
- //To change background and Foreground of the color
- BtnClick.Background(SolidColorBrush(Colors::Red()));
- BtnClick.Foreground(SolidColorBrush((Colors::Yellow())));
- BtnClick.Click(&App::BtnClick);
- Window window = Window::Current();
- window.Content(BtnClick);
- window.Activate();
- }
- void App::BtnClick(IInspectable const & sender,const RoutedEventArgs &args)
- {
- MessageDialog msgDlg(L"Button Click Event",L"C++/UWP");
- msgDlg.ShowAsync();
- }
- int __stdcall wWinMain(HINSTANCE,HINSTANCE,PWSTR,int)
- {
- Application::Start([](auto &&) {make<App>(); });
- return 0;
- }
خروجی