programing

WPF 텍스트 블록에서 내 텍스트를 여러 줄로 표시하려면 어떻게 해야 합니까?

muds 2023. 4. 26. 23:47
반응형

WPF 텍스트 블록에서 내 텍스트를 여러 줄로 표시하려면 어떻게 해야 합니까?

wpf 창에는 두 개의 뷰포트가 있는 스택 패널이 있습니다. 각 뷰포트에는 텍스트 블록이 있습니다.

<Grid>
    <StackPanel VerticalAlignment="Center" Orientation="Vertical" >
        <Viewbox Margin="100,0,100,0">
            <TextBlock x:Name="headerText" 
                       Text="Lorem ipsum dolor" 
                       Foreground="Black"/>
        </Viewbox>
        <Viewbox Margin="150,0,150,0">
            <TextBlock x:Name="subHeaderText" 
                       Text="Lorem ipsum dolor, Lorem ipsum dolor, lorem isum dolor, Lorem ipsum dolor, Lorem ipsum dolor, lorem isum dolor, " 
                       TextWrapping="Wrap" 
                       Foreground="Gray" />
        </Viewbox>
    </StackPanel>
</Grid>

제가 이루고 싶은 것은 상단 텍스트 블록이 더 큰 텍스트가 있는 제목이라는 것입니다.두 번째 텍스트 블록은 작은 텍스트가 있는 하위 제목입니다.제목 또는 부제목에 대한 텍스트 수가 아무리 많더라도 글꼴은 동적으로 더 작아지거나 커져야 합니다.저의 문제는 부제목을 고정 폭으로 했으면 하는 것입니다.즉, 글꼴은 텍스트 양에 따라 제목의 백분율(70%)이 되어야 하고 여러 줄로 묶어야 합니다.제가 지금까지 가지고 있는 코드를 동봉합니다.저는 그 부제가 있는 무언가를 놓치고 있습니다. 무엇인지 알 수 없습니다.건배.

편집 기본적으로 내가 원하는 것은 하위 헤더가 텍스트를 감싸서 글꼴이 제목의 70%로 아래로 확장할 수 있도록 하는 것입니다. 글꼴이 아무리 크더라도 말입니다.

스택 패널을 중첩하면 텍스트 상자가 올바르게 감깁니다.

<Viewbox Margin="120,0,120,0">
    <StackPanel Orientation="Vertical" Width="400">
        <TextBlock x:Name="subHeaderText" 
                   FontSize="20" 
                   TextWrapping="Wrap" 
                   Foreground="Black"
                   Text="Lorem ipsum dolor, lorem isum dolor,Lorem ipsum dolor sit amet, lorem ipsum dolor sit amet " />
    </StackPanel>
</Viewbox>

속성 사용TextWrappingTextBlock요소:

<TextBlock Text="StackOverflow Forum"
           Width="100"
           TextWrapping="WrapWithOverflow"/>

줄 바꿈 사용:

<TextBlock>
        <Run Text="Line1"/>
        <LineBreak/>
        <Run Text="Line2" FontStyle="Italic" FontSize="9"/>
        <LineBreak/>
        <Run Text="Line3"/>
    </TextBlock>

다음을 참조하십시오. https://social.msdn.microsoft.com/Forums/vstudio/en-US/51a3ffe4-ec82-404a-9a99-6672f2a6842b/how-to-give-multiline-in-textblock?forum=wpf

감사해요.

RDV

이것은 부분적으로 진행됩니다.실제 글꼴 크기 속성은 없지만 실제 높이가 있으며 글꼴 크기와 관련이 있습니다.현재 이 크기는 원래 렌더의 크기에만 해당합니다.Converter를 크기 조정 이벤트로 등록하는 방법을 알 수 없습니다.실제로 글꼴 크기를 크기 조정 이벤트로 등록해야 할 수도 있습니다.불완전한 답변 때문에 저를 깎아내리지 마세요.코드 샘플을 코멘트에 넣지 못했습니다.

    <Window.Resources>
        <local:WidthConverter x:Key="widthConverter"/>
    </Window.Resources>
    <Grid>
        <Grid>
            <StackPanel VerticalAlignment="Center" Orientation="Vertical" >
                <Viewbox Margin="100,0,100,0">
                    <TextBlock x:Name="headerText" Text="Lorem ipsum dolor" Foreground="Black"/>
                </Viewbox>
                <TextBlock Margin="150,0,150,0" FontSize="{Binding ElementName=headerText, Path=ActualHeight, Converter={StaticResource widthConverter}}" x:Name="subHeaderText" Text="Lorem ipsum dolor, Lorem ipsum dolor, lorem isum dolor, Lorem ipsum dolor, Lorem ipsum dolor, lorem isum dolor, " TextWrapping="Wrap" Foreground="Gray" />
            </StackPanel>
        </Grid>
    </Grid>        

변환기

    [ValueConversion(typeof(double), typeof(double))]
    public class WidthConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            double width = (double)value*.7;
            return width; // columnsCount;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    } 

헤더 글꼴을 나머지 글꼴보다 조금 더 크게 하려면 스케일 변환을 사용할 수 있습니다.따라서 실제 글꼴 크기에 의존하지 않습니다.

 <TextBlock x:Name="headerText" Text="Lorem ipsum dolor">
                <TextBlock.LayoutTransform>
                    <ScaleTransform ScaleX="1.1" ScaleY="1.1" />
                </TextBlock.LayoutTransform>
  </TextBlock>

위의 모든 답변이 제 요구를 충족시키지 못했으며 여기 있는 대부분의 사람들도 비슷한 문제를 가지고 있을 것이라고 확신합니다.제가 원했던 것은 줄 피드를 포함하는 문자열 속성을 텍스트 블록에 바인딩하고 단일 줄이 아닌 여러 줄로 표시하는 것이었습니다.WPF는 이것에 대한 쉬운 해결책이 없는 것 같아서 저는 저만의 작은 해결책을 찾았습니다.편집 가능성을 비활성화하고 텍스트 블록처럼 만드는 사용자 지정 스타일의 텍스트 상자를 사용합니다.사람들이 이제 당신의 텍스트 블록에서 텍스트를 복사할 수 있다는 추가적인 이점과 함께 매력적으로 작동하며, 적어도 내 모든 애플리케이션에서 승리입니다!

<Style  TargetType="{x:Type TextBox}" x:Key="TextBlock">
    <Setter Property="Background" Value="Transparent"/>
    <Setter Property="BorderBrush" Value="Transparent"/>
    <Setter Property="BorderThickness" Value="0"/>
    <Setter Property="Foreground" Value="Black"/>
    <Setter Property="IsReadOnly" Value="True"/>
    <Setter Property="FontSize" Value="12"/>
    <Setter Property="VerticalContentAlignment" Value="Left"/>
</Style>

다음과 같이 사용할 수 있습니다.

<TextBox Style="{StaticResource TextBlock}" Text="{Binding UpdateChanglog}"/>

다음과 같이 표시됩니다.

여기에 이미지 설명 입력

텍스트 범위:

•Update is from server!
•The camera now actually works
•Images are sharp
•Network is great
•Everybody happy

언급URL : https://stackoverflow.com/questions/7406973/how-do-i-make-a-wpf-textblock-show-my-text-on-multiple-lines

반응형