自定义附加 属性 未找到
custom attached property not found
我想为枢轴元素实现一个新的 属性(名为 "MenuForeground"),以便通过定义的 ControlTemplate 更改 PivotItem header 的颜色。
因此我为自定义 属性 创建了一个新的 class,在需要的 code-behind xaml.h 文件中添加了 #include 并定义了一个新的命名空间("xamlns:cap") 根据自定义的命名空间属性.
PivotProperties.h
#pragma once
using namespace Windows::UI::Xaml;
namespace CustomAttachedProperties
{
public ref class PivotProperties sealed : Windows::UI::Xaml::DependencyObject
{
public:
static Windows::UI::Color GetMenuForeground(UIElement^ obj);
static void SetMenuForeground(UIElement^ obj, Windows::UI::Color value);
static property DependencyProperty^ MenuForegroundProperty
{
DependencyProperty^ get() { return _menuForegroundProperty; }
}
private:
static DependencyProperty^ _menuForegroundProperty;
};
}
PivotProperties.cpp
#include "pch.h"
#include "PivotProperties.h"
using namespace CustomAttachedProperties;
DependencyProperty^ PivotProperties::_menuForegroundProperty = DependencyProperty::RegisterAttached(
"MenuForeground",
Windows::UI::Color::typeid,
Windows::UI::Xaml::Controls::Pivot::typeid,
ref new PropertyMetadata(false));
Windows::UI::Color PivotProperties::GetMenuForeground(UIElement^ obj)
{
return (Windows::UI::Color)obj->GetValue(_menuForegroundProperty);
}
void PivotProperties::SetMenuForeground(UIElement^ obj, Windows::UI::Color value)
{
obj->SetValue(_menuForegroundProperty, value);
}
为了将新的 属性 用于主元元素,我在根元素中声明了一个新的 xml 名称空间,如下所示
<Page
// ...
xmlns:cap="clr-namespace:CustomAttachedProperties">
但是如果我尝试使用新的 属性 ...
<Pivot x:Name="pivot" cap:PivotProperties.MenuForeground="Red">...</Pivot>
... 弹出错误消息:“在类型 'PivotProperties'.
中找不到可附加的 属性 'MenuForeground'
如何解决?
RegisterAttached
方法的第三个参数ownerType
必须是
The owner type that is registering the dependency property
不是您要设置的对象类型属性。
所以你的声明应该是这样的:
DependencyProperty^ PivotProperties::_menuForegroundProperty =
DependencyProperty::RegisterAttached(
"MenuForeground",
Windows::UI::Color::typeid,
PivotProperties::typeid, // here
ref new PropertyMetadata(false));
另请注意,您的 PivotProperties
class 不必派生自 DependencyObject
,只要它仅声明附加属性即可。
您也可以考虑将 Windows.UI.Xaml.Media.Brush
用作 属性 类型,以使其符合其他属性,例如 Background
和 Foreground
.
我想为枢轴元素实现一个新的 属性(名为 "MenuForeground"),以便通过定义的 ControlTemplate 更改 PivotItem header 的颜色。
因此我为自定义 属性 创建了一个新的 class,在需要的 code-behind xaml.h 文件中添加了 #include 并定义了一个新的命名空间("xamlns:cap") 根据自定义的命名空间属性.
PivotProperties.h
#pragma once
using namespace Windows::UI::Xaml;
namespace CustomAttachedProperties
{
public ref class PivotProperties sealed : Windows::UI::Xaml::DependencyObject
{
public:
static Windows::UI::Color GetMenuForeground(UIElement^ obj);
static void SetMenuForeground(UIElement^ obj, Windows::UI::Color value);
static property DependencyProperty^ MenuForegroundProperty
{
DependencyProperty^ get() { return _menuForegroundProperty; }
}
private:
static DependencyProperty^ _menuForegroundProperty;
};
}
PivotProperties.cpp
#include "pch.h"
#include "PivotProperties.h"
using namespace CustomAttachedProperties;
DependencyProperty^ PivotProperties::_menuForegroundProperty = DependencyProperty::RegisterAttached(
"MenuForeground",
Windows::UI::Color::typeid,
Windows::UI::Xaml::Controls::Pivot::typeid,
ref new PropertyMetadata(false));
Windows::UI::Color PivotProperties::GetMenuForeground(UIElement^ obj)
{
return (Windows::UI::Color)obj->GetValue(_menuForegroundProperty);
}
void PivotProperties::SetMenuForeground(UIElement^ obj, Windows::UI::Color value)
{
obj->SetValue(_menuForegroundProperty, value);
}
为了将新的 属性 用于主元元素,我在根元素中声明了一个新的 xml 名称空间,如下所示
<Page
// ...
xmlns:cap="clr-namespace:CustomAttachedProperties">
但是如果我尝试使用新的 属性 ...
<Pivot x:Name="pivot" cap:PivotProperties.MenuForeground="Red">...</Pivot>
... 弹出错误消息:“在类型 'PivotProperties'.
中找不到可附加的 属性 'MenuForeground'如何解决?
RegisterAttached
方法的第三个参数ownerType
必须是
The owner type that is registering the dependency property
不是您要设置的对象类型属性。
所以你的声明应该是这样的:
DependencyProperty^ PivotProperties::_menuForegroundProperty =
DependencyProperty::RegisterAttached(
"MenuForeground",
Windows::UI::Color::typeid,
PivotProperties::typeid, // here
ref new PropertyMetadata(false));
另请注意,您的 PivotProperties
class 不必派生自 DependencyObject
,只要它仅声明附加属性即可。
您也可以考虑将 Windows.UI.Xaml.Media.Brush
用作 属性 类型,以使其符合其他属性,例如 Background
和 Foreground
.