Wpf 带有对角文本线的RichTextBox
我想有一个自定义的RichTextBox控件,用于像MS Word这样的应用程序。但挑战是按对角线输入文本。目前,我在RichTextBox的Document属性中使用了一个RichTextBox和一个TextEffect来显示对角线上的文本,它可以正常工作。不幸的是,插入符号出现在其原始位置和方向,因此用户将不清楚他编辑了什么、在哪里键入以及选择了什么。你能帮我吗Wpf 带有对角文本线的RichTextBox,wpf,richtextbox,rotatetransform,Wpf,Richtextbox,Rotatetransform,我想有一个自定义的RichTextBox控件,用于像MS Word这样的应用程序。但挑战是按对角线输入文本。目前,我在RichTextBox的Document属性中使用了一个RichTextBox和一个TextEffect来显示对角线上的文本,它可以正常工作。不幸的是,插入符号出现在其原始位置和方向,因此用户将不清楚他编辑了什么、在哪里键入以及选择了什么。你能帮我吗 <Style TargetType="Run"> <Setter Property="TextEff
<Style TargetType="Run">
<Setter Property="TextEffects">
<Setter.Value>
<TextEffectCollection>
<TextEffect PositionCount="99999">
<TextEffect.Transform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform Angle="30"/>
<TranslateTransform X="30" Y="0"/>
</TransformGroup>
</TextEffect.Transform>
</TextEffect>
</TextEffectCollection>
</Setter.Value>
</Setter>
</Style>
希望这有帮助
<Window.Resources>
<Style TargetType="RichTextBox">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBoxBase}">
<Grid>
<Border Name="Border" Padding="1" BorderThickness="1" Background="Transparent" BorderBrush="Gray">
<ScrollViewer Margin="0" x:Name="PART_ContentHost" >
<ScrollViewer.RenderTransform>
<RotateTransform Angle="45"></RotateTransform>
</ScrollViewer.RenderTransform>
</ScrollViewer>
</Border>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Border" Property="BorderBrush" Value="Black"></Setter>
</Trigger>
<Trigger Property="IsKeyboardFocusWithin" Value="True">
<Setter TargetName="Border" Property="BorderBrush" Value="Black"></Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid>
<RichTextBox Height="300" Width="300">
<RichTextBox.Document>
<FlowDocument>
<Paragraph>
<Run>
</Run>
</Paragraph>
</FlowDocument>
</RichTextBox.Document>
</RichTextBox>
</Grid>
更新
<Window.Resources>
<Style TargetType="RichTextBox">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBoxBase}">
<Grid>
<Border Name="Border" Padding="1" BorderThickness="1" Background="Transparent" BorderBrush="Gray">
<ScrollViewer x:Name="PART_ContentHost" Margin="0" ScrollViewer.VerticalScrollBarVisibility="Auto">
<ScrollViewer.LayoutTransform>
<SkewTransform AngleY="20"/>
</ScrollViewer.LayoutTransform>
</ScrollViewer>
</Border>
<TextBlock TextWrapping="Wrap">
<ContentPresenter></ContentPresenter>
</TextBlock>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Border" Property="BorderBrush" Value="Black"></Setter>
</Trigger>
<Trigger Property="IsKeyboardFocusWithin" Value="True">
<Setter TargetName="Border" Property="BorderBrush" Value="Black"></Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
您也可以使用旋转变换。也可以尝试使用旋转变换谢谢您的回答。但是在这种情况下,文本行不会与垂直行对齐,几行之后文本会溢出richtextbox(行将从外部开始)。谢谢。在这个新方法中,字母倾斜,我不想要倾斜的文本。+1这个答案在旋转变换和倾斜变换中也非常有效。我在TextEffect中添加了一个新的倾斜变换-20,以抵消文本上的倾斜效应,现在它有了一个有趣的外观。但我不确定这是否是最佳实践。您是否尝试过使用旋转变换的skewtransform代码??“旋转变换”不会显示倾斜文本。