C# 由于不清楚的原因,使用TextRange方法获取错误

C# 由于不清楚的原因,使用TextRange方法获取错误,c#,wpf,richtextbox,highlighting,textrange,C#,Wpf,Richtextbox,Highlighting,Textrange,我试图在wpf中突出显示richtextbox中的TextRange,但是我不断得到下面关于无效参数的错误,尽管我非常确信该参数实际上是正确的。我知道如何阻止程序崩溃,但如果抛出此ArgumentException,则我的程序不会执行我希望的操作 下面是GetAllWordRanges方法的代码 private static IEnumerable<TextRange> GetAllWordRanges(FlowDocument document, List<string&g

我试图在wpf中突出显示richtextbox中的TextRange,但是我不断得到下面关于无效参数的错误,尽管我非常确信该参数实际上是正确的。我知道如何阻止程序崩溃,但如果抛出此ArgumentException,则我的程序不会执行我希望的操作

下面是GetAllWordRanges方法的代码

private static IEnumerable<TextRange> GetAllWordRanges(FlowDocument document, List<string> keywords)
{
    foreach (string keyword in keywords)
    {
        TextPointer pointer = document.ContentStart;
        while (pointer != null)
        {
            if (pointer.GetPointerContext(LogicalDirection.Forward) == TextPointerContext.Text)
            {
                string textRun = pointer.GetTextInRun(LogicalDirection.Forward);
                MatchCollection matches = Regex.Matches(textRun, keyword);
                foreach (Match match in matches)
                {
                    int startIndex = match.Index;
                    int length = match.Length;
                    TextPointer start = pointer.GetPositionAtOffset(startIndex);
                    TextPointer end = start.GetPositionAtOffset(length);
                    yield return new TextRange(start, end);
                }
            }

            pointer = pointer.GetNextContextPosition(LogicalDirection.Forward);
        }
    }
}

在winforms糟糕的旧时代,我们有GDI+类型用于呈现UI

然后是WPF。这是对桌面应用程序UI堆栈的完全重写。除了创建不同版本的UI元素(System.Windows.Forms.Window与System.Windows.Controls.Window)外,还重写了渲染堆栈和相关类。不管明智与否,许多以前的模式都是在这次重写中复制的

Winforms将留在框架中,让不明智的人绊倒并造成自己的伤害。由于我们现在有两个(不兼容的)相同模式的版本在框架内共存,我们也可能不幸地困住了多层WPF开发人员

最常见的陷阱之一是导入
System.Drawing
命名空间。WPF开发者的等价物实际上是
System.Windows.Media
。这两个名称空间都包含许多极其相似但不兼容的类型。如果你不小心(如果你没有得到很好的异常消息,告诉你需要的effing类型的effing名称空间和你实际使用的motherefign类型的名称空间),你将
使用错误的名称空间,开始在GDI+画笔周围游荡


小心,WPF开发人员。确保始终使用WPF堆栈!Winforms面向穷人和未受教育者。我们现在不想与这些人交往,是吗?

可能不清楚,因为您还没有阅读或理解错误是什么。我可以肯定地说,因为你那该死的问题没有错。任何一个看到这个错误的人都很有可能立即告诉你错误是什么。没有这些信息,我们只能猜测。因此,抓取错误的文本(请注意,不是一个有效的图像,而是文本)并将其粘贴到一个文件夹中。以后遵循这个建议,你会有很多答案。我的错,我现在改了。对不起。那是。。。一张图片。你是说复制到剪贴板的位置吗?将
画笔.Red
更改为
系统.Windows.Media.brusks.Red
,看看是否有效
System.ArgumentException was unhandled
  HResult=-2147024809
  Message='SolidBrush' parameter type is not valid for formatting property 'Background'.
Parameter name: value
  Source=PresentationFramework
  ParamName=value
  StackTrace:
       at System.Windows.Documents.TextRange.ApplyPropertyValue(DependencyProperty formattingProperty, Object value, Boolean applyToParagraphs, PropertyValueAction propertyValueAction)
       at System.Windows.Documents.TextRange.ApplyPropertyValue(DependencyProperty formattingProperty, Object value)
       at EmailCheckerWPF.TextAnalyser.turnTextRed(RichTextBox TextBox, List`1 Keywords) in c:\Users\Luke\Documents\Caimbridge comp\EmailCheckerWPF\TextAnalyser.cs:line 138
       at EmailCheckerWPF.MainWindow.AnalyseButton_Click(Object sender, RoutedEventArgs e) in c:\Users\Luke\Documents\Caimbridge comp\EmailCheckerWPF\MainWindow.xaml.cs:line 50
       at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
       at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
       at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
       at System.Windows.UIElement.RaiseEvent(RoutedEventArgs e)
       at System.Windows.Controls.Primitives.ButtonBase.OnClick()
       at System.Windows.Controls.Button.OnClick()
       at System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)
       at System.Windows.UIElement.OnMouseLeftButtonUpThunk(Object sender, MouseButtonEventArgs e)
       at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
       at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
       at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
       at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
       at System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)
       at System.Windows.UIElement.OnMouseUpThunk(Object sender, MouseButtonEventArgs e)
       at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
       at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
       at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
       at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
       at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
       at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
       at System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted)
       at System.Windows.Input.InputManager.ProcessStagingArea()
       at System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)
       at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
       at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
       at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
       at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
       at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
       at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
       at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
       at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
       at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
       at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
       at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
       at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
       at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
       at System.Windows.Threading.Dispatcher.Run()
       at System.Windows.Application.RunDispatcher(Object ignore)
       at System.Windows.Application.RunInternal(Window window)
       at System.Windows.Application.Run(Window window)
       at System.Windows.Application.Run()
       at EmailCheckerWPF.App.Main() in c:\Users\Luke\Documents\Caimbridge comp\EmailCheckerWPF\obj\Debug\App.g.cs:line 0
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: