Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 带有对角文本线的RichTextBox_Wpf_Richtextbox_Rotatetransform - Fatal编程技术网

Wpf 带有对角文本线的RichTextBox

Wpf 带有对角文本线的RichTextBox,wpf,richtextbox,rotatetransform,Wpf,Richtextbox,Rotatetransform,我想有一个自定义的RichTextBox控件,用于像MS Word这样的应用程序。但挑战是按对角线输入文本。目前,我在RichTextBox的Document属性中使用了一个RichTextBox和一个TextEffect来显示对角线上的文本,它可以正常工作。不幸的是,插入符号出现在其原始位置和方向,因此用户将不清楚他编辑了什么、在哪里键入以及选择了什么。你能帮我吗 <Style TargetType="Run"> <Setter Property="TextEff

我想有一个自定义的RichTextBox控件,用于像MS Word这样的应用程序。但挑战是按对角线输入文本。目前,我在RichTextBox的Document属性中使用了一个RichTextBox和一个TextEffect来显示对角线上的文本,它可以正常工作。不幸的是,插入符号出现在其原始位置和方向,因此用户将不清楚他编辑了什么、在哪里键入以及选择了什么。你能帮我吗

  <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代码??“旋转变换”不会显示倾斜文本。