programing

WPF를 사용하여 레이블에서 텍스트를 랩핑하려면 어떻게 해야 합니까?

padding 2023. 5. 23. 21:36
반응형

WPF를 사용하여 레이블에서 텍스트를 랩핑하려면 어떻게 해야 합니까?

저는 라벨과 라벨을 가지고 있습니다.단추를 클릭한 후 다음 코드를 실행합니다.

 label1.Content = textbox1.Text; 

제 질문은 레이블의 텍스트 래핑을 활성화하려면 어떻게 해야 합니까?한 줄에 표시하기에는 텍스트가 너무 많을 수 있으며, 그렇다면 여러 줄로 자동으로 포장했으면 합니다.

Label컨트롤은 WPF의 텍스트 래핑을 직접 지원하지 않습니다.대신 를 사용해야 합니다. (물론, 당신은 그것을 배치할 수 있습니다.)TextBlock 내부에Label제어(원하는 경우).

샘플 코드:

<TextBlock TextWrapping="WrapWithOverflow">
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec adipiscing
    nulla quis libero egestas lobortis. Duis blandit imperdiet ornare. Nulla
    ac arcu ut purus placerat congue. Integer pretium fermentum gravida.
</TextBlock>

종종 당신은 a를 대체할 수 없습니다.Label와 함께TextBlock사용하고 싶은 대로Target속성(아래 샘플 코드의 ALT+C와 같이 키보드를 사용할 때 표적 컨트롤에 초점을 설정함).Label보다 더 많이 제공되는TextBlock.

그러나, a.Label를 사용합니다.TextBlock텍스트를 렌더링합니다(문자열이 배치된 경우).Content속성(일반적으로 해당); 따라서 다음에 대한 스타일을 추가할 수 있습니다.TextBlock내부에Label이와 같이:

<Label              
    Content="_Content Text:"
    Target="{Binding ElementName=MyTargetControl}">
    <Label.Resources>
        <Style TargetType="TextBlock">
            <Setter Property="TextWrapping" Value="Wrap" />
        </Style>
    </Label.Resources>
 </Label>
 <CheckBox x:Name = "MyTargetControl" />

이러한 방식으로 당신은 a의 기능을 유지할 수 있습니다.Label텍스트를 감쌀 수도 있습니다.

저는 다음 코드를 사용했습니다.

    <Label>
        <Label.Content>
            <AccessText TextWrapping="Wrap" Text="xxxxx"/>
        </Label.Content>
    </Label>

레이블 내부에 텍스트 블록을 넣을 수 있습니다.

<Label> 
  <TextBlock Text="Long Text . . . ." TextWrapping="Wrap" /> 
</Label> 

레이블 컨트롤에서 텍스트를 줄 바꿈하려면 다음과 같이 레이블 템플릿을 변경합니다.

<Style x:Key="ErrorBoxStyle" TargetType="{x:Type Label}">
    <Setter Property="BorderBrush" Value="#FFF08A73"/>
    <Setter Property="BorderThickness" Value="1"/>
    <Setter Property="Foreground" Value="Red"/>
    <Setter Property="Background" Value="#FFFFE3DF"/>
    <Setter Property="FontWeight" Value="Bold"/>
    <Setter Property="Padding" Value="5"/>
    <Setter Property="HorizontalContentAlignment" Value="Left"/>
    <Setter Property="VerticalContentAlignment" Value="Top"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Label}">
                <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true" CornerRadius="5" HorizontalAlignment="Stretch">
                     
                    <TextBlock TextWrapping="Wrap" Text="{TemplateBinding Content}"/>
                </Border>
                    
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

레이블 클래스를 사용하는 대신 텍스트 블록을 사용하는 것이 좋습니다.이렇게 하면 텍스트 래핑을 적절하게 설정할 수 있습니다.

언제든지 할 수 있습니다.

 label1.Content = new TextBlock() { Text = textBox1.Text, TextWrapping = TextWrapping.Wrap };

그러나 이 모든 "라벨"이 텍스트를 표시하기 위한 것이라면,TextBlock대신.

텍스트 블록/텍스트 상자와 같은 텍스트를 감쌀 수 있는 일종의 제어 장치를 설치해야 합니다.

 <Label Width="120" Height="100" >
        <TextBlock TextWrapping="Wrap">
            this is a very long text inside a textblock and this needs to be on multiline.
        </TextBlock>
    </Label>

이것을 사용해 보세요.

lblresult.Content = lblresult.Content + "prime are :" + j + "\n";
 <Label x:Name="datetimeofmsg" 
           HorizontalAlignment="Left" Margin="4.286,55,0,0" 
           VerticalAlignment="Top" Background="{x:Null}" 
           FontWeight="Bold" Width="61.714" Height="20" Foreground="White">
        <Label.Content>
            <AccessText TextWrapping="Wrap"/>
        </Label.Content>
    </Label>

MySql 데이터베이스에서 데이터를 검색하는 데 사용했습니다.

AccessText a = new AccessText();    
a.Text=reader[1].ToString();       // MySql reader
a.Width = 70;
a.TextWrapping = TextWrapping.WrapWithOverflow;
labels[i].Content = a;

언급URL : https://stackoverflow.com/questions/5013067/how-can-i-wrap-text-in-a-label-using-wpf

반응형