В классе C ++ / CX я хочу создать DependencyProperty
, который получает или устанавливает нормальный тип значения C ++ float
, но я просто не могу понять, как мне нужно указать тип, ожидаемый DependencyProperty::Register
.
Позвольте мне привести пример. Если бы я использовал свойство, которое работает со ссылочным типом, я поместил бы следующее в заголовочный файл моего класса C ++ / CX:
public:
static property Windows::UI::Xaml::DependencyProperty^ BackgroundColorProperty
{
Windows::UI::Xaml::DependencyProperty^ get();
};
property Windows::UI::Xaml::Media::Brush^ BackgroundColor
{
Windows::UI::Xaml::Media::Brush^ get();
void set(Windows::UI::Xaml::Media::Brush^ value);
};
private:
static Windows::UI::Xaml::DependencyProperty^ _backgroundColorProperty;
static void OnBackgroundColorChanged(Windows::UI::Xaml::DependencyObject^ d, Windows::UI::Xaml::DependencyPropertyChangedEventArgs^ e);
Реализация выглядела бы так:
DependencyProperty^ MyCustomClass::BackgroundColorProperty::get()
{
return _backgroundColorProperty;
}
Windows::UI::Xaml::Media::Brush^ MyCustomClass::BackgroundColor::get()
{
return static_cast<Windows::UI::Xaml::Media::Brush^>(GetValue(BackgroundColorProperty));
}
void MyCustomClass::BackgroundColor::set(Windows::UI::Xaml::Media::Brush^ value)
{
SetValue(BackgroundColorProperty, value);
}
DependencyProperty^ MyCustomClass::_backgroundColorProperty =
DependencyProperty::Register("BackgroundColor",
Brush::typeid,
MyCustomClass::typeid,
ref new PropertyMetadata(ref new SolidColorBrush(Windows::UI::ColorHelper::FromArgb(255, 255, 255, 255)), ref new PropertyChangedCallback(&MyCustomClass::OnBackgroundColorChanged)));
void MyCustomClass::OnBackgroundColorChanged(DependencyObject^ d, DependencyPropertyChangedEventArgs^ e)
{
MyCustomClass^ myClass = static_cast<MyCustomClass^>(d);
// Do whatever needs to be done
}
Это все работает. XAML Designer в Visual Studio распознает это свойство и все работает, как и ожидалось.
Но допустим, я хочу свойство, которое использует float
вместо Brush
. Как мне нужно указать необходимый тип в методе DependencyProperty::Register
? Я имею в виду второй аргумент в коде ниже.
DependencyProperty^ MyCustomClass::_backgroundColorProperty =
DependencyProperty::Register("BackgroundColor",
/* How do I specify the type of the float here?*/,
MyCustomClass::typeid,
ref new PropertyMetadata(1.0f, ref new PropertyChangedCallback(&MyCustomClass::OnBackgroundColorChanged)));
Я пробовал следующее, которое не сработало:
ref new TypeKind(TypeKind::Primitive, float32)
typeof(float32)
typeof(float)
typeid(float)
ref new Windows::UI::Xaml::Interop::TypeKind(TypeKind::Primitive, float)
ref new Windows::UI::Xaml::Interop::TypeKind(TypeKind::Primitive, typeid(float))