【发布时间】:2013-04-23 19:57:28
【问题描述】:
我正在玩一点 Windows 8 并构建 Windows 应用商店应用程序。目前我正在尝试创建一个弹出窗口。我想点击作为Windows::UI::Xaml::Controls::Primitives::Popup 的Child 托管的(原始)用户控件上的按钮。
当我点击按钮时,我想做一些事情并最终关闭弹出窗口。当我读到here
可视化树之外的路由事件
... 如果要处理来自 Popup 或 ToolTip 的路由事件,请将处理程序放在 Popup 或 ToolTip 内的特定 UI 元素上,而不是 Popup 或 ToolTip 元素本身。不要依赖于为 Popup 或 ToolTip 内容执行的任何合成中的路由。这是因为路由事件的事件路由仅沿主视觉树工作。 ...
然后我创建了一个丑陋的解决方案,将弹出窗口(作为父级)传递给我的自定义控件。
void Rotate::MainPage::Image1_RightTapped_1(Platform::Object^ sender, Windows::UI::Xaml::Input::RightTappedRoutedEventArgs^ e)
{
Popup^ popup = ref new Popup();
ImagePopup^ popupchild = ref new ImagePopup(popup); //pass parent's reference to child
popupchild->Tapped += ref new TappedEventHandler(PopupButtonClick);
popup->SetValue(Canvas::LeftProperty, 100);
popup->SetValue(Canvas::TopProperty, 100);
popup->Child = popupchild;
popup->IsOpen = true;
}
void PopupButtonClick(Platform::Object^ sender, Windows::UI::Xaml::Input::TappedRoutedEventArgs^ e){
ImagePopup^ imgPop = static_cast<ImagePopup^>(sender);
if(imgPop != nullptr){
imgPop->CloseParent();
e->Handled = true;
}
e->Handled = false;
}
还有其他方法吗?谢谢。
【问题讨论】:
标签: c++ xaml windows-runtime routed-events