قبل از خواندن این مقاله، خواندن قسمت قبلی مجموعه را به شدت توصیه می کنم.
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن (کنترل دکمه)
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن (Stackpanel)
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن (CheckBox)
دکمه رادیویی
RadioButton برای اجازه دادن به کاربر برای انتخاب موارد منفرد استفاده می شود، در حالی که چک باکس به کاربران امکان می دهد چند انتخاب را انجام دهند. هر RadioButton حاوی ویژگی GroupName است. اگر یک نام گروه را تنظیم کنیم، همه دکمه های رادیویی متعلق به یک نام گروه هستند و بر اساس نام های مختلف، می توانیم یک یا چند گروه از دکمه های رادیویی ایجاد کنیم.
RadioButton باید تحت هر یک از نام های گروه باشد. اگر نام گروه مشخص نشده باشد radioButton مجاز به انتخاب چندگانه است.
RadioButton دو حالت دارد: انتخاب شده و پاک شده. در گروهی که یک دکمه رادیویی حالت دکمه رادیویی دیگر را برای پاک کردن خودکار انتخاب کرده است، از ویژگی IsChecked برای یافتن اینکه آیا مورد انتخاب شده است یا خیر استفاده می شود. اگر مورد انتخاب شده باشد، ویژگی IsChecked درست است، در غیر این صورت نادرست است.
ملک را تگ کنید
ویژگی برچسب برای ذخیره مقدار سفارشی در کنترل استفاده می شود. به جای ویژگی IsChecked، می توانیم از ویژگی Tag برای پردازش سریع عملیات استفاده کنیم.
بیایید یک مثال از نحوه استفاده از RadioButton و Tag Property را ببینیم. بر اساس انتخاب دکمه رادیویی، رنگ پس زمینه ویندوز باید تغییر کند.
- #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;
- StackPanel sPanel;
- IInspectable MakeString(hstring captionText)
- {
- return PropertyValue::CreateString(captionText);
- }
- IInspectable MakeTag(int Idx)
- {
- return PropertyValue::CreateInt32(Idx);
- }
- RadioButton CreateRadioBtn(hstring groupName, hstring contentName,int TagIdx)
- {
- RadioButton RButton;
- RButton.GroupName(groupName);
- RButton.Content(MakeString(contentName));
- RButton.Checked({this,&App::RdButtonClick});
- RButton.Tag(MakeTag(TagIdx));
- return RButton;
- }
- hstring GetRbButtonName(IInspectable const& sender)
- {
- RadioButton chkBox = sender.as<RadioButton>();
- IPropertyValue IValue = chkBox.Content().as<IPropertyValue>();
- return IValue.GetString();
- }
- int GetTagIndex(IInspectable const& sender)
- {
- RadioButton chkBox = sender.as<RadioButton>();
- IPropertyValue IValue = chkBox.Tag().as<IPropertyValue>();
- return IValue.GetInt32();
- }
- void RdButtonClick(IInspectable const & sender, const RoutedEventArgs &args)
- {
- auto Idx = GetTagIndex(sender);
- auto chkName = GetRbButtonName(sender);
- switch(Idx)
- {
- case 1:
- sPanel.Background(SolidColorBrush(Colors::Red()));
- break;
- case 2:
- sPanel.Background(SolidColorBrush(Colors::Green()));
- break;
- case 3:
- sPanel.Background(SolidColorBrush(Colors::Blue()));
- break;
- }
- }
- void OnLaunched(LaunchActivatedEventArgs const&)
- {
- auto RdBtnRed = CreateRadioBtn(L"Color", L"Red",1);
- auto RdBtnGreen = CreateRadioBtn(L"Color", L"Green",2);
- auto RdBtnBlue = CreateRadioBtn(L"Color", L"Blue",3);
- Thickness margin;
- margin.Bottom = 10;
- margin.Left = 10;
- margin.Right = 10;
- margin.Top = 10;
- sPanel.Margin(margin);
- sPanel.Children().Append(RdBtnRed);
- sPanel.Children().Append(RdBtnGreen);
- sPanel.Children().Append(RdBtnBlue);
- auto window = Window::Current();
- window.Content(sPanel);
- window.Activate();
- }
- };
- int __stdcall wWinMain(HINSTANCE, HINSTANCE, PWSTR, int)
- {
- Application::Start([](auto &&) {make<App>(); });
- return 0;
- }
خروجی
تگ یک رابط IInspectable است، بنابراین باید از PropertyValue برای تبدیل int به IInspectable استفاده کنیم.
- IInspectable MakeTag(int Idx)
- {
- return PropertyValue::CreateInt32(Idx);
- }
و به عنوان عملگر برای تبدیل مقدار IInspectable به PropertyValue استفاده می شود:
- int GetTagIndex(IInspectable const& sender)
- {
- RadioButton chkBox = sender.as<RadioButton>();
- IPropertyValue IValue = chkBox.Tag().as<IPropertyValue>();
- return IValue.GetInt32();
- }
نتیجه
امیدوارم نحوه استفاده از کنترل Radiobutton را متوجه شده باشید.