UWP C#中OnFileActivated无法加载TXT内容至RichEditBox问题
修复UWP应用OnFileActivated加载文本到RichEditBox失效的问题
嘿,我找到你代码里的关键问题了!你现在的代码之所以没法把文件内容显示到RichEditBox里,核心原因是你操作了一个错误的MainPage实例,咱们一步步来修正:
问题出在哪?
在OnNavigatedTo方法里,你写了await new MainPage().LoadTextFile(file);——这里你新建了一个MainPage对象,但这个对象和当前界面上显示的MainPage完全是两个独立的实例!所以你调用的LoadTextFile只是修改了那个看不见的新页面,自然不会在界面上有任何反应。另外,参数的处理也可以更直接,不用绕弯子转成IActivatedEventArgs。
修正后的完整代码
1. 更新App.xaml.cs中的OnNavigatedTo方法
我们要获取导航后实际显示在界面上的MainPage实例,而不是新建一个:
async void OnNavigatedTo(object sender, NavigationEventArgs e) { // 直接拿到导航传递过来的FileActivatedEventArgs参数 var fileArgs = e.Parameter as FileActivatedEventArgs; if (fileArgs != null && fileArgs.Kind == ActivationKind.File && fileArgs.Files.Count > 0) { var targetFile = fileArgs.Files[0] as StorageFile; if (targetFile != null) { // 获取当前Frame里的MainPage实例(就是界面上显示的那个) var currentMainPage = (sender as Frame).Content as MainPage; if (currentMainPage != null) { await currentMainPage.LoadTextFile(targetFile); } } } }
2. 给MainPage的RichEditBox命名
打开MainPage.xaml,确保你的RichEditBox有x:Name属性,这样后台代码才能找到它:
<RichEditBox x:Name="editorBox" Margin="12,12,0,0" />
3. 完善MainPage的LoadTextFile方法
现在可以放心操作界面上的RichEditBox了,同时保持标题栏的逻辑:
public async Task LoadTextFile(StorageFile file) { // 读取文件内容 string fileContent = await FileIO.ReadTextAsync(file); // 更新文件路径和标题栏 current_path = file.Path; current_file = file.Name; var appView = Windows.UI.ViewManagement.ApplicationView.GetForCurrentView(); appView.Title = current_path; // 将内容写入RichEditBox editorBox.Document.SetText(Windows.UI.Text.TextSetOptions.None, fileContent); }
额外小建议
- 可以加一些异常处理,比如捕获文件读取失败的情况,提升应用稳定性
- 如果想支持同时打开多个.txt文件,可以遍历
fileArgs.Files集合逐个处理
这样修改后,再用“打开方式”选择你的应用打开txt文件,就能看到文件内容正常显示在RichEditBox里,标题栏的路径也能正常工作啦!
内容的提问来源于stack exchange,提问作者Miguel Genaro
相关产品推荐
相关产品推荐

