如何在 WinUI3 C++ 的 `RichEditBox.TextDocument().GetText()` 方法中使用 `TextGetOptions`

问题描述 投票:0回答:1

我在 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 的答案与我的答案完全一样。我该如何解决这个问题?

c++ winapi windows-runtime winui-3
1个回答
0
投票

这里的问题是

TextGetOptions
是在两个不同的命名空间中声明的:
winrt::Windows::UI::Text
winrt::Microsoft::UI::Text
。因此,编译器假定这些类型不同,并且从一种类型到另一种类型的转换不可用。

要解决该问题,您必须执行以下任一操作

  • 删除将
    using
    合并到本地命名空间的
    winrt::Windows::UI::Text
    语句,或者
  • 使用完全限定的类型名称(例如,用
    winrt::Microsoft::UI::Text::TextGetOptions::None
    代替
    TextGetOptions::None
    )。
© www.soinside.com 2019 - 2024. All rights reserved.