首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RichTextBox SpellCheck ComException

RichTextBox SpellCheck ComException
EN

Stack Overflow用户
提问于 2018-04-19 15:11:29
回答 2查看 804关注 0票数 14

在一些Windows8.1机器上启用拼写检查时,我遇到了一个例外(这两台机器都有最新的更新,OS语言是俄文,.NET框架4.7是俄文),它说:

System.Reflection.TargetInvocationException:调用的目标引发了异常。( MS.Internal.WindowsRuntime.ReflectionHelper.ReflectionNewTArg1 at MS.Internal.WindowsRuntime.Windows.Data.Text.WordsSegmenter..ctor(String language)在MS.Internal.WindowsRuntime.Windows.Data.Text.WordsSegmenter.Create(String语言( CultureInfo shouldPreferNeutralSegmenter)( System.Windows.Documents.WinRTSpellerInterop..ctor() at System.Windows.Documents.SpellerInteropBase.CreateInstance() at System.Windows.Documents.Speller.EnsureInitialized() at System.Windows.Documents.Speller.SetCustomDictionaries(CustomDictionarySources dictionaryLocations,Boolean )在System.Windows.Documents.TextEditor.SetCustomDictionaries(Boolean add)( System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e) )( System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e) ( System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex,DependencyProperty dp,PropertyMetadata元数据,EffectiveValueEntry oldEntry,EffectiveValueEntry& newEntry,Boolean,Boolean coerceWithCurrentValue,operationType operationType) at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp,Object value,OperationType元数据,Boolean,布尔型查询,,布尔),对象值)

此代码可用于再现问题:

代码语言:javascript
复制
var richTextBox = new RichTextBox();
InputLanguageManager.SetInputLanguage(richTextBox,CultureInfo.GetCultureInfo("en-US"));
richTextBox.SetValue(SpellCheck.IsEnabledProperty, true);

在调查这个问题时,我发现s_WinRTType.ReflectionNew<string>(language);中抛出了一个异常,其中s_WinRTType描述了"Windows.Data.Text.WordsSegmenter,Windows,ContentType=WindowsRuntime。WordsSegmenter似乎是WinRT组件,所以我看不出里面发生了什么。我想知道它为什么抛出REGDB_E_INVALIDVALUE /它寻找的值是什么,它应该是什么样的?谢谢!“

更新1.我还看到注册表中存在该组件的密钥:

因此,这个组件可能会自行抛出异常。

EN

回答 2

Stack Overflow用户

发布于 2018-04-23 18:24:21

您需要安装语言特性,它通过控制面板或使用DISM与语言包不同。对我来说,这需要.Net 4.7,并且正在为windows 10 build 1709工作(秋季创建者更新)。我不知道这在Windows 8上是否可行。

如果您能够正确地访问windows更新(而不是在WSUS后面),您可以尝试安装它。

Dism /Online //Online

若要检查已安装的功能,请显示所有已安装的选项:

/online /get-capabilities /limitaccess

背景资料:

https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/add-language-packs-to-windows

https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/dism-capabilities-package-servicing-command-line-options

https://blogs.technet.microsoft.com/mniehaus/2015/08/31/adding-features-including-net-3-5-to-windows-10/

最后一个链接解释了另一个按需特性的版本2。对我来说它解决了一个问题。

使用按需特性isos (从msdn订阅下载它们):

对于windows 10 (不知道windows 8是否可用):en_windows_10_features_on_demand_part_1_version_1709_updated_sept_2017_x64_dvd_100090755 en_windows_10_features_on_demand_part_2_version_1709_updated_sept_2017_x64_dvd_100090754

提取它们并安装:

/packagepath:d:\features\Microsoft-Windows-LanguageFeatures-Basic-en-us-Package.cab /online /

PS:你在谷歌上搜索了REGDB_E_INVALIDVALUE:INVALIDVALUE loading Specific Project

例子:

您可以使用以下代码创建wpf测试应用程序:这将读取可以使用的AvailableInputLanguages。(对我来说,它没有显示.Net 4中的4种语言,只有我用Dism安装的语言。

代码语言:javascript
复制
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <ComboBox 
          ItemsSource="{Binding AvailableLanguages}"
          SelectionChanged="OnLanguageSelectionChanged"
          DisplayMemberPath="NativeName"/>
    <TextBox x:Name="textBox" Grid.Row="1"
         AcceptsReturn="True"
         AcceptsTab="True"
         SpellCheck.IsEnabled="True"
         Text="Hello world"/>
</Grid>

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        AvailableLanguages = new ObservableCollection<CultureInfo>();

        foreach (CultureInfo culterInfo in InputLanguageManager.Current.AvailableInputLanguages)
        {
            AvailableLanguages.Add(culterInfo);
        }

        DataContext = this;
    }

    public ObservableCollection<CultureInfo> AvailableLanguages
    {
        get { return (ObservableCollection<CultureInfo>)GetValue(AvailableLanguagesProperty); }
        set { SetValue(AvailableLanguagesProperty, value); }
    }

    public static readonly DependencyProperty AvailableLanguagesProperty = DependencyProperty.Register("AvailableLanguages", typeof(ObservableCollection<CultureInfo>), typeof(MainWindow));


    private void OnLanguageSelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        CultureInfo xmlLanguage = e.AddedItems[0] as CultureInfo;
        textBox.Language = XmlLanguage.GetLanguage(xmlLanguage.Name);
    }
}
票数 0
EN

Stack Overflow用户

发布于 2020-06-12 02:23:17

尝试如下:启动cmd (以管理员身份运行)

代码语言:javascript
复制
Dism /online /Add-Capability /capabilityname:Language.Basic~~~en-US~0.0.1.0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49924503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档