如何使用C ++ CX中的Calendarview :: setdensitycolors方法

时间:2017-01-24 18:42:56

标签: windows-runtime uwp win-universal-app windows-10-universal c++-cx

这是我试图调用的方法:

https://msdn.microsoft.com/en-us/library/windows/apps/dn890067.aspx

所以我创建了一个Platform :: Collections :: Vector并填充它,这很简单吗?

Platform::Collections::Vector<Windows::UI::Color>^ dayColors = ref new Platform::Collections::Vector<Windows::UI::Color>();
dayColors->Append(Windows::UI::Colors::Green);
myCalendarView->SetDensityColors(dayColors);

但是,我得到了这个编译错误,我无法解决这个错误:

错误C2678:二进制'==':找不到哪个运算符带有'const Windows :: UI :: Color'类型的左手操作数(或者没有可接受的转换)

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

  

错误C2678:二进制'==':找不到哪个运算符带有'const Windows :: UI :: Color'类型的左手操作数(或者没有可接受的转换)

此错误实际上是由代码行Platform::Collections::Vector<Windows::UI::Color>^ dayColors引发的。根据{{​​3}}文档中Vector中的值类型:

  

对于非标量值类型,例如Windows :: Foundation :: DateTime,或者用于自定义比较 - 例如,objA-&gt; UniqueID == objB-&gt; UniqueID-您必须提供自定义函数对象。

Collections (C++/CX)结构类型可能包含自定义比较,因此需要自定义函数对象。

按如下方式添加自定义结构将解决您的问题:

struct MyEqual : public std::binary_function<const Windows::UI::Color, const Windows::UI::Color, bool>
{
    bool operator()(const Windows::UI::Color& _Left, const Windows::UI::Color& _Right) const
    {
        return _Left.A == _Right.A;
    };
};

void CCalendarView2::MainPage::CalendarView_CalendarViewDayItemChanging(Windows::UI::Xaml::Controls::CalendarView^ sender, Windows::UI::Xaml::Controls::CalendarViewDayItemChangingEventArgs^ args)
{
    Platform::Collections::Vector<Windows::UI::Color, MyEqual>^ dayColors = ref new Platform::Collections::Vector<Windows::UI::Color,MyEqual>();
    dayColors->Append(Windows::UI::Colors::Green); 
    args->Item->SetDensityColors(dayColors);
}