2017-01-17 10 views
0

내 컨트롤 크기가 TextBox를 변경하거나 글꼴 크기가 올바르게 표시되도록 크기를 조정할 수 있도록 TextBox 스타일을 지정합니다.컨트롤 크기가 조정될 때 글꼴이 올바르게 표시되도록 텍스트 상자 크기 조정

나는 거의 효과가있다.

내 스타일 :

<UserControl.Resources> 
    <Style x:Key="ViewBoxTextBox" TargetType="TextBox"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="TextBox"> 
        <Viewbox HorizontalAlignment="Left"> 
         <TextBox Text="{TemplateBinding Text}" Width="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ActualWidth}"/> 
        </Viewbox> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</UserControl.Resources> 

예제 코드 : 아래

<TextBox Style="{StaticResource ViewBoxTextBox}" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Margin="2" Text="{Binding MyText}"/> 

은 3 조건의 스크린 샷이다. 세 번째 스크린 샷

Screenshots

내가 내 컨트롤 텍스트 상자 폰트가 정확하게 크기 감소의 높이지만 텍스트 상자 폭 전체 가능한 폭을 차지 감소되지 않고을 감소시킨다.

아이디어가 있으십니까?

+0

ViewBox의 Stretch 속성을 Fill로 설정하십시오. – mm8

+0

@ mm8 너비를 최대로 고정시키는 데는 효과가 있지만 글꼴 크기가 텍스트 상자 내에서 줄어들지 못하도록 방지했습니다. 대신 글꼴 높이가 급격히 떨어졌습니다. – CathalMF

+0

가장 쉬운 경로는'ViewBox' –

답변

0

때로는 컨트롤 템플릿의 기본 재정의를 만들기 위해 작동하지만이 경우 TextBox 내부의 텍스트를보다 세부적으로 제어해야합니다. 그렇게하기 위해 TextBox의 기본 템플릿 사본을 얻은 다음 수정을가했습니다.

<SolidColorBrush x:Key="TextBox.Static.Border" Color="#FFABAdB3"/> 
    <SolidColorBrush x:Key="TextBox.MouseOver.Border" Color="#FF7EB4EA"/> 
    <SolidColorBrush x:Key="TextBox.Focus.Border" Color="#FF569DE5"/> 
    <Style x:Key="ViewBoxTextBox" TargetType="{x:Type TextBox}"> 
     <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/> 
     <Setter Property="BorderBrush" Value="{StaticResource TextBox.Static.Border}"/> 
     <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> 
     <Setter Property="BorderThickness" Value="1"/> 
     <Setter Property="KeyboardNavigation.TabNavigation" Value="None"/> 
     <Setter Property="HorizontalContentAlignment" Value="Left"/> 
     <Setter Property="FocusVisualStyle" Value="{x:Null}"/> 
     <Setter Property="AllowDrop" Value="true"/> 
     <Setter Property="ScrollViewer.PanningMode" Value="VerticalFirst"/> 
     <Setter Property="Stylus.IsFlicksEnabled" Value="False"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type TextBox}"> 
        <Border x:Name="border" 
          BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" 
          Background="{TemplateBinding Background}" 
          VerticalAlignment="Top" 
          Width="{Binding RelativeSource={RelativeSource TemplatedParent},Path=ActualWidth}" 
          SnapsToDevicePixels="True"> 
         <Viewbox HorizontalAlignment="Left" StretchDirection="DownOnly"> 
          <ScrollViewer x:Name="PART_ContentHost" 
              Focusable="false" 
              HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden" 
              Width="{Binding RelativeSource={RelativeSource TemplatedParent},Path=ActualWidth}"/> 
         </Viewbox> 
        </Border> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsEnabled" Value="false"> 
          <Setter Property="Opacity" TargetName="border" Value="0.56"/> 
         </Trigger> 
         <Trigger Property="IsMouseOver" Value="true"> 
          <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource TextBox.MouseOver.Border}"/> 
         </Trigger> 
         <Trigger Property="IsKeyboardFocused" Value="true"> 
          <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource TextBox.Focus.Border}"/> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
     <Style.Triggers> 
      <MultiTrigger> 
       <MultiTrigger.Conditions> 
        <Condition Property="IsInactiveSelectionHighlightEnabled" Value="true"/> 
        <Condition Property="IsSelectionActive" Value="false"/> 
       </MultiTrigger.Conditions> 
       <Setter Property="SelectionBrush" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightBrushKey}}"/> 
      </MultiTrigger> 
     </Style.Triggers> 
    </Style> 

ContentHost

이 올바르게 텍스트를 확장 할 수 이는 뷰 박스 안에 포장되고, 국경은 더 정상 크기 제한에 따라 조정됩니다. 여러 가지 시나리오에서 시도해 보았습니다. 시도한 경우에도 효과가있었습니다. 잘하면 그것은 당신의 사용을 위해 작동합니다.