我最近一直在开发一个RTF编辑器,它只是一个简单的UserControl,有RichTextBox一些像PreviewTextInput和的事件PreviewMouseUp.
我注意到有些烦人的东西.RichTextBox每当UI被调整大小并且RichTextBox有大量的文本导致其包装算法被触发时,性能绝对可怕.
这给应用程序带来了一种非常草率的感觉,好像它的优化程度很差(即使它没有).
起初我在选择Text时注意到了这个性能,所以SelectionChanged我决定使用该PreviewMouseUp事件而不是使用该事件,然后获取Selection.
然后在进一步测试后我发现调整大小也造成了巨大的负荷.我说的是负载范围在5% - > 30%之间,四核CPU运行在3.8GHz!
为了进一步测试它,我决定评论我的RichTextBox,只包括一个RichTextBox没有定义属性的新
<RichTextBox/>
Run Code Online (Sandbox Code Playgroud)
将其插入到窗口中,填充文本,然后调整窗口大小以使包装算法再次执行相同操作,使用率高达30%!
我试图研究这个问题,大多数人最后建议设置PageWidth为高值以防止包装:
richTextBox1.HorizontalScrollBarVisibility = ScrollBarVisibility.Visible;
richTextBox1.Document.PageWidth = 1000;
Run Code Online (Sandbox Code Playgroud)
我不想要的,因为我编写的编辑器的前一版本是使用WinForms制作的,可以毫不费力地进行包装,我也想在新的WPF版本中使用它.
有没有人遇到过这个问题?如果是的话,请您指出正确的方向,以消除硬件上的巨大压力?
我有点难过,因为我喜欢WPF,但我确实找到了一个或者另一个与WinForms对应物相比没有优化和/或不实用的对象,RichTextBox似乎是另一个案例:(
对于大量的文本感到抱歉,但是我真的想要整齐地记录这个问题,以防其他一些可怜的灵魂面临这个问题,并且让你们看看到目前为止我尝试过的东西.
我正在尝试为按钮创建一个模板,以防止控件在禁用时变灰,它工作正常,但由于某种原因,一旦我为它设置了颜色按钮属性,它就不会更改背景.
这是我制作的按钮:
Run Code Online (Sandbox Code Playgroud)<Style TargetType="Button" x:Key="TestButton"> <Setter Property="SnapsToDevicePixels" Value="true" /> <Setter Property="OverridesDefaultStyle" Value="true" /> <Setter Property="MinHeight" Value="29px" /> <Setter Property="MinWidth" Value="103px" /> <Setter Property="Foreground" Value="Black" /> <Setter Property="Background" Value="#EEEEEE"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="Button"> <Border TextBlock.Foreground="{TemplateBinding Foreground}" x:Name="Border"> <Border.Background> <SolidColorBrush Color="{TemplateBinding Background}" /> </Border.Background> <Border.BorderBrush> <SolidColorBrush Color="Black" /> </Border.BorderBrush> <Border.BorderThickness> <Thickness Top="0.75" Bottom="0.75" Right="0.75" Left="0.75"/> </Border.BorderThickness> <Border.CornerRadius> <CornerRadius TopLeft="3" TopRight="3" BottomLeft="3" BottomRight="3"/> </Border.CornerRadius> <ContentPresenter Margin="2" HorizontalAlignment="Center" VerticalAlignment="Center" RecognizesAccessKey="True" /> </Border> <!--Triggers--> <ControlTemplate.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Background" Value="#E1F3FD" /> </Trigger> <Trigger …
我正在努力完成这个问题所要求的内容,但不幸的是,作为答案提供的代码示例已经消失,而且我也没有使用WPF Toolkit,这里是他所做的问题:
我正在尝试在WPF工具包datagrid中合并单元格.我正在尝试执行如下图所示的操作.我们可以在Winforms datagrid中执行此操作.但是如何使用WPF工具包datagrid执行此操作?.或者是否有任何替代控件. .?
我们可以使用listview或listbox来做这件事吗?或者是否有任何具有此功能的免费控件?

我发现有几个答案可以通过DataGridView控件来实现,但是我不想在WPF项目中使用Form对象,有没有办法来实现这个?
我试图从一堆随机字符或单词中获取一个单词,例如,我想检查dog以下字符串中是否存在该单词:
string animal = "MyNewdogIsVeryPlayful";
Run Code Online (Sandbox Code Playgroud)
我该如何管理?