我在 C++ windows 应用程序上使用 WinUI3。而且我必须根据文档和 Visual Studio Intellisense 将
TextGetOptions
传递给 TextDocument().GetText()
。
void MainWindow::TextPreviewKeyDown(IInspectable const& sender, KeyRoutedEventArgs const& e)
{
RichEditBox richEditBox = sender.as<RichEditBox>();
hstring OldText;
richEditBox.TextDocument().GetText(TextGetOptions::None, OldText);//First Argument
}
但是智能感知显示
TextGetOptions::None
错误。它说:“winrt::Windows::UI::Text::TextGetOptions
的论证与const winrt::Microsoft::UI::Text::TextGetOptions &
的论证不相容”
编译器错误:C2664 无法将参数 1 从
winrt::Windows::UI::Text::TextGetOptions
转换为 const winrt::Microsoft::UI::Text::TextGetOptions &
。
这是
GetText()
的方法
void GetText(TextGetOptions const& options, [Out] winrt::hstring const& & value);
我已经使用 WinUI3 和 C# 很长时间了,但我对 C++ 中的 WinUI3 并不熟悉。我只知道“&”表示选项指针。 Bing Copilot 的答案与我的答案完全一样。我该如何解决这个问题?
这里的问题是
TextGetOptions
是在两个不同的命名空间中声明的:winrt::Windows::UI::Text
和 winrt::Microsoft::UI::Text
。因此,编译器假定这些类型不同,并且从一种类型到另一种类型的转换不可用。
要解决该问题,您必须执行以下任一操作
using
合并到本地命名空间的 winrt::Windows::UI::Text
语句,或者 winrt::Microsoft::UI::Text::TextGetOptions::None
代替 TextGetOptions::None
)。