You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinUI3 C++中RichEditBox.GetText()参数类型不匹配问题求解

解决WinUI3 C++中RichEditBox.GetText的TextGetOptions类型不兼容问题

问题核心是命名空间混淆:你代码中使用的TextGetOptions::None属于Windows::UI::Text命名空间,但WinUI3的TextDocument::GetText方法要求的是Microsoft::UI::Text命名空间下的同名枚举类型——两者是不同的WinRT类型,无法隐式转换,因此触发C2664错误。

解决方案

有两种方式修正这个问题:

1. 显式指定完整命名空间

直接在枚举值前添加Microsoft::UI::Text命名空间限定,明确使用WinUI专属的枚举类型:

void MainWindow::TextPreviewKeyDown(IInspectable const& sender, KeyRoutedEventArgs const& e)
{
    RichEditBox richEditBox = sender.as<RichEditBox>();
    hstring OldText;
    // 显式指定WinUI的TextGetOptions枚举
    richEditBox.TextDocument().GetText(Microsoft::UI::Text::TextGetOptions::None, OldText);
}

2. 添加命名空间引用

在代码文件头部(所有#include指令之后)添加命名空间声明,后续代码可直接使用TextGetOptions:

#include "pch.h"
#include "MainWindow.xaml.h"
// 引入WinUI文本处理命名空间
using namespace Microsoft::UI::Text;

void MainWindow::TextPreviewKeyDown(IInspectable const& sender, KeyRoutedEventArgs const& e)
{
    RichEditBox richEditBox = sender.as<RichEditBox>();
    hstring OldText;
    // 直接使用枚举名称即可
    richEditBox.TextDocument().GetText(TextGetOptions::None, OldText);
}

补充说明

WinUI3作为Windows App SDK的UI框架,提供了独立于传统UWP的Microsoft::UI系列命名空间,其中Microsoft::UI::Text是专为WinUI设计的文本处理API集合,和UWP的Windows::UI::Text是并行的两套类型系统,即使枚举成员名称相同,也不能直接混用。

内容的提问来源于stack exchange,提问作者Eric Nien

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 15:54:59