ProgramingTip

WPF 버튼의 여러 줄 텍스트

bestdevel 2020. 12. 2. 21:42
반응형

WPF 버튼의 여러 줄 텍스트


C # 만 사용하여 WPF 단추에 여러 줄 텍스트를 가져 오려면 어떻게해야합니까? <LineBreak/>XAML에서 사용 하는 예를 성공적으로 생성합니다. 버튼의 번호와 레이블은 도메인 모델의 값에 사용하는 XAML을 사용하여 수 있습니다.

아래의 순진한 접근 방식을 시도했지만 작동하지 않습니다.

Button b = new Button();
b.Content = "Two\nLines";

또는

b.Content = "Two\r\nLines";

두 경우 모두 내가 보는 것은 텍스트의 첫 번째 줄 ( "2")뿐입니다.


또는 XAML에서 직접 :

<Button>
   <TextBlock>Two<LineBreak/>Lines</TextBlock>  
</Button>

이 방법을 선호합니다.

<Button Width="100">
  <TextBlock TextWrapping="Wrap">This is a fairly long button label</TextBlock>
</Button>

그것은 나를 위해 일했습니다.


대답은 매우 간단합니다. &#xa;줄 바꿈을 도입 하는 사용하십시오 .

<Button Content="Row 1 Text &#xa; Row 2 Text"/>

XAML을 통해이 작업을 수행하는 방법에는 여러 가지가 있습니다.

  1. 줄 바꿈이있는 TextBlock을 추가합니다.
<Button>     
    <TextBlock TextAlignment="Center">Line 1<LineBreak/>Line 2</TextBlock>
</Button>
  1. 텍스트에 줄 바꿈 추가 :

이 방법은 간단하지만 텍스트 정렬을 쉽게 제어 할 수 있습니다.

    <Button Content="Line 1 &#xa; Line 2"/>
  1. 텍스트 블록 추가 및 텍스트 기

버튼 크기가 TextBlocks 크기보다 작 으면 콘텐츠를 두 줄 이상 자동으로 분할합니다.

<Button>
  <TextBlock TextWrapping="Wrap" HorizontalAlignment="Center">Line 1 Line 2</TextBlock>
</Button>
  1. 버튼에서 StackPanel을 사용하고 각 줄을 텍스트 블록으로 추가합니다.
<Button>
    <StackPanel>
        <TextBlock Text="Line1" HorizontalAlignment="Center"/>
        <TextBlock Text="Line2" HorizontalAlignment="Center"/>
    </StackPanel>
</Button>

  1. 버튼에서 그리드 사용 :
<Button>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
            <TextBlock Text="Line1" HorizontalAlignment="Center"/>
            <TextBlock Text="Line2" HorizontalAlignment="Center"/>
    </Grid>
</Button>
  • 나는 더 많은 것이 기본 존재 확신하며, 목록은 기본적으로 가장 좋아하는 것부터 가장 약간 것까지 순서대로 있습니다.

이것이 우리가 여기서하는 방법입니다.

<Button Height="40" Width="75">
    <StackPanel>
        <TextBlock Text="Line1" HorizontalAlignment="Center"/>
        <TextBlock Text="Line2" HorizontalAlignment="Center"/>
    </StackPanel>
</Button>

"\ n"이 잘 작동합니다. 내 그리드의 크기는 고정되어 있으며 더 많은 텍스트를 사용할 수 있습니다. (예 : 잘림을 "..."없음). 그리드의 크기를 넉넉하게 확장하면 버튼 텍스트가 두 줄로 나타납니다.


이거 해봤 어?

b.Content = new TextBlock { 
    Text = "Two\lLines", 
    TextWrapping = TextWrapping.Wrap };

그래도 작동하지 않는 StackPanel을 세부적으로 추가하고 여기에 두 개의 TextBlock 요소를 추가 할 수 있습니다.


어때 :

TextBlock textBlock = new TextBlock();
textBlock.Inlines.Add("Two");
textBlock.Inlines.Add(new LineBreak());
textBlock.Inlines.Add("Lines");
Button button = new Button();
button.Content = textBlock;

C # 3을 사용하는 경우 약간 깔끔하게 만들 수 있습니다.

Button button = new Button
{
    Content = new TextBlock { Inlines = { "Two", new LineBreak(), "Lines" } }
};

나는 같은 문제가 있었다.

나는 시도했다 :
-button.content = "Line1 \ nLine2"(작동하지 않음, 내가 뭔가 잘못했을 수도 있음);
-버튼 텍스트를 새 레이블로 교체 (텍스트를 가운데 정렬 할 수 없음)
-버튼 텍스트를 텍스트 블록으로 교체합니다 (텍스트를 가운데 정렬 할 수 있지만 줄 바꿈하지는 않습니다).

스택 패널 또는 그리드 사용에 대한 답변을 보았습니다. Textbox
를 사용하지 말라는 답변을 보았습니다 .

OP가 \n작동 한다고 말하지만 , 나는 그것이 갈 길이라고 생각하지 않습니다. 제 생각에 당신은 당신이 원하는 것을 제어하도록 무차별 적으로 강요하고 있으며 언제든지 텍스트를 변경해야 할 경우 텍스트가 올바르게 포장되었는지 또는 \n다른 위치에 있어야 하는지 확인해야합니다 .
가장 좋은 방법은 버튼 콘텐츠를 텍스트 상자로 바꾸고 (끌어서 놓기 만하면되고, XAML을 엉망으로 만들 필요가 없음) 다음 속성을 설명 된대로 설정하는 것입니다. IsReadOnly = true ;
Focusable = false (선택 사항);
나는 Focusable = false사용자가 텍스트를 편집 할 수는 없지만 선택 (개인 취향)조차하지 않기를 바랍니다.

이렇게하면 텍스트 상자가 레이블과 비슷하게 작동하지만 텍스트를 중앙에 정렬 할 수있는 이점이 있습니다.


아래 코드를 시도하십시오.

<Button Command="{Binding DeliveryDateCommand}" x:Name="cntlbtnf5" Background="White" BorderBrush="#FFABADB3" Grid.Column="4">
   <Border BorderBrush="{x:Null}" Height="Auto">
     <TextBlock Text="Ctrl + F5 Delivery BillDate" TextWrapping="Wrap" Width="110" TextAlignment="Center" Height="44" />
   </Border>
</Button>

참고 URL : https://stackoverflow.com/questions/1449276/multiline-text-in-a-wpf-button

반응형