C# 有没有可能;“缩放”;WPF RichTextBox中的文本?

C# 有没有可能;“缩放”;WPF RichTextBox中的文本?,c#,.net,wpf,richtextbox,zooming,C#,.net,Wpf,Richtextbox,Zooming,我注意到WinForms RichTextBox有一个ZoomFactor属性,我假设它正是我想要的——不幸的是,WPF变体似乎完全没有这个属性 是否有任何方法可以实现相同的功能(增加/减少整个文档的可见文本大小,而不实际更改底层RTF) 更新:虽然在RichTextBox上设置LayoutTransform似乎在非常简单的设置下工作,但它与设置ZoomFactor并不完全相同,原因有两点: 首先,滚动条也会缩放。这看起来很傻 其次,在我的应用程序中(出于某种原因,但不是在Kaxaml中——我

我注意到WinForms RichTextBox有一个
ZoomFactor
属性,我假设它正是我想要的——不幸的是,WPF变体似乎完全没有这个属性

是否有任何方法可以实现相同的功能(增加/减少整个文档的可见文本大小,而不实际更改底层RTF)

更新:虽然在RichTextBox上设置LayoutTransform似乎在非常简单的设置下工作,但它与设置ZoomFactor并不完全相同,原因有两点:

  • 首先,滚动条也会缩放。这看起来很傻
  • 其次,在我的应用程序中(出于某种原因,但不是在Kaxaml中——我将对此进行研究以找出原因),文本是位图缩放的,因此它只是放大渲染的文本,而不是向量缩放,使其平滑。下面是我所说的示例(请注意大自定义滚动条的方式):

更新2:好的,我发现位图缩放是由于将TextOptions.textformatingmode设置为
Display
而不是
Ideal
引起的。将其设置为“理想”将重新引入向量缩放

然而,仍然有那个讨厌的滚动条!我的意思是一个选项是禁用RichTextBox上的滚动并将其包装在ScrollViewer中,但我想知道这是否会降低性能。我还想知道如果我这样做的话,文本包装是否仍然有效。

请看一看,因为我认为这正是您想要的

我注意到WinForms RichTextBox 我假设的ZoomFactor属性是 这正是我想要的——不幸的是 这一点似乎完全不存在 WPF变体


你需要回去阅读WPF的基础知识。逐项。停下来。文本框中缺少ZoomFactor的原因是每个WPF控件都可以通过通用标准度量进行转换(缩放、3d转换)和动画制作,因此根本不需要特殊方法。

这应该让您开始:

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <DockPanel LastChildFill="True">  
     <Slider x:Name="Scale" DockPanel.Dock="Bottom" Minimum="1" Maximum="20"/>
     <RichTextBox>
      <RichTextBox.LayoutTransform>
        <ScaleTransform ScaleX="{Binding ElementName=Scale, Path=Value}" ScaleY="{Binding ElementName=Scale, Path=Value}"/>
      </RichTextBox.LayoutTransform>
     </RichTextBox>
  </DockPanel>
</P


我想到了这一点,但通过变换缩放文本框不就可以使整个文本框均匀地变大吗?我希望文本仍然正确包装,等等。嘿,它工作了!实际上,我很惊讶,因为我无法理解添加转换如何影响文本换行的基本逻辑。@devios1您已经解决了滚动条缩放问题吗?文本换行工作正常。(更难的问题是,如果你想关闭文本包装并使用水平滚动。)性能似乎没有任何不同,我也想不出应该有什么原因。您可能要做的一件事是编辑
RichTextBox
的控件模板,这样它就不会有任何类型的边框chrome,因为它也会被缩放,放大30倍的效果很糟糕。我担心的是,RichTextBox可能会对大型文档执行某种内部虚拟化,如果我手动将其包装到ScrollViewer中,这是不会发生的。现在一切似乎都很好,除了恼人的事实,我不能为RichTextBox使用显示模式(由于RichTextBox和TextOptions的缺陷/限制,当缩放因子为1.0时,我甚至不能将其设置为显示模式),但这相对较小。到目前为止,大型RTF文件的性能没有明显下降,但是RichTextBox在处理大型RTF文档时总是有点慢。