2014-03-06 3 views
0

MS Word와 같은 응용 프로그램에서 사용할 RichTextBox 컨트롤을 사용자 정의하고 싶습니다. 그러나 텍스트를 대각선으로 입력하는 것이 중요합니다. 현재 RichTextBox와 TextEffect를 사용하여 텍스트를 대각선으로 표시하는 RichTextBox의 Document 속성에서 실행하고 작동합니다. 불행히도 캐럿은 원래 위치와 방향으로 나타납니다. 따라서 사용자는 그가 편집 한 내용, 입력 한 부분 및 선택한 내용을 혼동하게됩니다. 나 좀 도와 줄 수있어?대각선 텍스트 줄이있는 RichTextBox

<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> 

답변

1

희망이 도움

<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> 

당신은 회전 사용하여 대답을 회전 변환으로도

+0

감사를 also..try 변환 할 수 있습니다. 그러나이 경우 텍스트 줄이 세로줄에 정렬되지 않고 몇 줄이 지나면 텍스트가 richtextbox에서 오버플로됩니다 (줄이 바깥 쪽에서 시작됩니다). – Morteza

+0

감사합니다. 이 새로운 접근 방식에서는 글자가 기울고 나는 기울어 진 텍스트를 원하지 않습니다. – Morteza

+0

+1이 답변은 rotate transform 및 skewe transform에서도 효과적입니다. –