【发布时间】:2019-01-25 08:52:56
【问题描述】:
如何将 C++/WinRT 的 Microsoft ButtonBase.Click Event 信息转换为原型声明和定义?
在 Visual Studio Community 2017 版本 15.9.5 中,我创建了一个标准项目,即空白应用 (C++/WinRT),其中包含一个按钮 (myButton)。我想学习如何添加第二个按钮。我为第二个按钮 (myButton2) 添加了 XAML 代码,但此后我被卡住了。
<Page
x:Class="X003.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:X003"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<StackPanel x:Name="stackPan" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center" Background="LightBlue">
<Button x:Name="myButton" Click="ClickHandler">Click Me</Button>
<Button x:Name="myButton2" Click="ClickHandler2">Click Me2</Button>
</StackPanel>
</Page>
我可以从空白应用程序 (C++/WinRT) 提供的第一个按钮中复制代码。但是,如果我没有第一个按钮作为示例,我将不知道如何翻译 Microsoft 文档,即,
// Register
event_token Click(RoutedEventHandler const& handler) const;
// Revoke with event_token
void Click(event_token const& cookie) const;
// Revoke with event_revoker
Click_revoker Click(auto_revoke_t, RoutedEventHandler const& handler) const;
进入 Click 处理程序。 Microsoft 文档的第一行,即,
event_token Click(RoutedEventHandler const& handler) const;
我认为是用于创建处理程序的格式。它看起来不像项目中已经存在的处理程序,即,
void ClickHandler(Windows::Foundation::IInspectable const& sender, Windows::UI::Xaml::RoutedEventArgs const& args);
我认为可以将其添加到 .idl 文件中。但是,.idl 文件中没有第一个按钮。
Microsoft 提供的示例代码适用于 C#,即使在页面右上角选择了“C++/WinRT”也是如此。
新版C++/WinRT文档很多,几乎太多了。由于使用过 C#/WPF/XAML,我无法清楚地看到使用 C++/WinRT 进行类似工作的方式。
最后,项目属性选项卡没有任何帮助。在 C# 中,事件被列出,选择一个将导致在代码中创建声明和基本定义。对于 C++/WinRT,当光标位于 XAML 页面中的控件上时,属性页面的事件部分会显示控件的名称 myButton 或 myButton2,并指示“文档项没有代码隐藏文件。添加添加事件处理程序之前的代码隐藏文件和类定义。”但是,没有现有按钮 myButton 的代码隐藏文件。
【问题讨论】:
-
此问题已链接到此处的 Microsoft 线程中:github.com/MicrosoftDocs/windows-uwp/issues/1398