source

그리드의 사용 가능한 공간을 채우도록 WPF TextBlock 글꼴 크기 조정

nicesource 2023. 4. 14. 21:54
반응형

그리드의 사용 가능한 공간을 채우도록 WPF TextBlock 글꼴 크기 조정

텍스트 블록에 런타임에 표시되는 텍스트가 있습니다.주어진 영역을 채울 수 있는 가장 큰 글꼴 크기를 원합니다.텍스트 블록이 올바르게 설정되어 있어 텍스트 블록이 부모보다 클 때까지 폰트 크기를 늘린 후 폰트 크기를 1로 줄입니다.문제는 크기를 재작성/재작성할 수 없다는 것입니다.

더 좋은 방법이 있을까요?아니면 방법을 사용할 수 있는 방법이 있을까요?

를 랩하다TextBlock내부ViewBox:

   <Grid>
    <Viewbox>
        <TextBlock TextWrapping="Wrap" Text="Some Text" />
    </Viewbox>
   </Grid>

저도 같은 문제가 있었어요.사용하여 텍스트 블록의 글꼴 크기를 조정하여 영역이 오버플로일 때 영역을 채울 수 있습니다.


<Viewbox StretchDirection="DownOnly" Stretch="Uniform">
    <TextBlock Text="{Binding Path=Title}" HorizontalAlignment="Center"/>
</Viewbox>

WPFViewBox컨트롤의 내용은 사용 가능한 공간에 따라 확대/축소할 수 있습니다.

그냥 두기만 하면 돼TextBlock의 범위 내에서ViewBox다음과 같이.

<Viewbox Stretch="Uniform" Width="50" Height="50">
    <TextBlock Text="Test" />
</Viewbox>

ViewBox는 일반적으로 컨테이너에 따라 크기가 조정됩니다.

이 작업을 수행할 수 있는 좋은 방법을 찾았습니다.ViewBox:

 <Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
        <RowDefinition Height="50" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="100" />
    </Grid.ColumnDefinitions>
    <Viewbox Grid.Row="0" Grid.Column="0" Stretch="Uniform">
        <TextBlock Name="tbTest" Background="Yellow" Text="This is some text" />    
    </Viewbox>

    <ContentControl Grid.Column="0" Grid.Row="2">
        <TextBlock>This is some text</TextBlock>
    </ContentControl>
</Grid>

"완벽한" 답변은 아니지만 빠른 해킹입니다(이것을 kaxaml에 떨어뜨려 테스트할 수 있습니다).

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Grid Height="300" Background="green">  
  <Viewbox>
  <TextBlock Background="red" Text="Hurr"/>
  </Viewbox>
  </Grid>
</Page>

ViewBox컨테이너를 채우기 위해 모든 콘텐츠를 확장합니다.문제는 이 시스템이TextBlock텍스트에 맞게 크기가 조정되는 동안 위아래에 제거할 수 없는 패딩이 있습니다(무거운 리프팅 없이).이렇게 하면 원하는 것에 더 가까워질 수 있어요, 토

포장을 확실하게 하기 위해MaxWidth및/또는MaxHeightTextBlock

<Viewbox StretchDirection="DownOnly" Stretch="Uniform">
      <TextBlock  MaxWidth="500" TextWrapping="Wrap" FontSize="30" VerticalAlignment="Center"
                  Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."/>

텍스트 래핑을 유지하면서 Viewbox를 사용할 수 있는 깔끔한 타협점을 찾았습니다.

<ContentControl> 및 x:Type ContentControl을 버튼, 그리드 또는 필요한 크기로 대체하여 부모로서 사용할 수 있습니다.

<ContentControl>
    <Viewbox Stretch="Uniform" StretchDirection="DownOnly">
        <TextBlock Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContentControl}}, Path=ActualWidth}" TextWrapping="WrapWithOverflow">some long random Text to be fitted</TextBlock>
    </Viewbox>
</ContentControl>

언급URL : https://stackoverflow.com/questions/2282662/wpf-textblock-font-resize-to-fill-available-space-in-a-grid

반응형