小编Ste*_*ges的帖子

RichTextBox - UI Resize导致巨大的CPU负载

我最近一直在开发一个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似乎是另一个案例:(

对于大量的文本感到抱歉,但是我真的想要整齐地记录这个问题,以防其他一些可怜的灵魂面临这个问题,并且让你们看看到目前为止我尝试过的东西.

c# wpf xaml

10
推荐指数
1
解决办法
409
查看次数

触发器不会改变背景

我正在尝试为按钮创建一个模板,以防止控件在禁用时变灰,它工作正常,但由于某种原因,一旦我为它设置了颜色按钮属性,它就不会更改背景.

这是我制作的按钮:

    <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 …
Run Code Online (Sandbox Code Playgroud)

wpf xaml

4
推荐指数
1
解决办法
1967
查看次数

Datagrid,Merge/Combine行,单元格和列

我正在努力完成这个问题所要求的内容,但不幸的是,作为答案提供的代码示例已经消失,而且我也没有使用WPF Toolkit,这里是他所做的问题:

我正在尝试在WPF工具包datagrid中合并单元格.我正在尝试执行如下图所示的操作.我们可以在Winforms datagrid中执行此操作.但是如何使用WPF工具包datagrid执行此操作?.或者是否有任何替代控件. .?

我们可以使用listview或listbox来做这件事吗?或者是否有任何具有此功能的免费控件?

在此输入图像描述

我发现有几个答案可以通过DataGridView控件来实现,但是我不想在WPF项目中使用Form对象,有没有办法来实现这个?

wpf datagrid listview

3
推荐指数
1
解决办法
1万
查看次数

从字符串中获取单词,这是一堆融合的单词

我试图从一堆随机字符或单词中获取一个单词,例如,我想检查dog以下字符串中是否存在该单词:

string animal = "MyNewdogIsVeryPlayful";
Run Code Online (Sandbox Code Playgroud)

我该如何管理?

c#

-5
推荐指数
1
解决办法
180
查看次数

标签 统计

wpf ×3

c# ×2

xaml ×2

datagrid ×1

listview ×1