2011-02-16 40 views
185

我有一個TextBox和一個標籤。點擊一個按鈕後,我執行以下代碼:如何使用WPF將文本包裝到標籤中?

label1.Content = textbox1.Text; 

我的問題是,如何啓用標籤的文字環繞?在一行中可能會顯示太多的文本,並且如果是這種情況,我希望它自動換行到多行。

回答

293

Label控制不直接支持文字環繞在WPF。您應該改用TextBlock。 (當然,你可以把TextBlockLabel控制,如果你想。)

示例代碼:

<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> 
+20

...並設置`IsReadOnly =「true」`來模仿一個標籤:) – JulianM 2011-11-23 01:34:29

+5

這很好,但如果你想使用標籤的目標屬性功能 - 這是公平的可能是*僅*原因是您將在TextBlock上使用標籤。我已經提供了這個問題的答案,顯示如何包裝在一個標籤(下) – PaulJ 2012-03-02 11:04:51

+16

JulianM - 他們已經只讀http://stackoverflow.com/questions/5073244/making-textblock-readonly?也許他們不在2011 – 2014-05-27 23:02:07

10

而不是使用標籤類,我會建議使用TextBlock。這使您可以適當地設置TextWrapping

你總是可以做到:

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

然而,如果這一切的「標籤」是是用來顯示文字,使用TextBlock代替。

+2

好惡呸,裏德!代碼隱藏!驚恐的事件。驚恐的事件。 2015-08-05 00:32:22

25

你可以把一個TextBlock標籤內:

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

我喜歡這種方法,因爲它允許您的標籤樣式適用於此文本塊,而無需爲TextBlock製作其他樣式。 – Sogger 2013-01-08 17:27:25

12

要包裹在標籤控件中的文本,改變標籤的模板如下:

<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> 
90

通常你不能用TextBlock,只要你想使用Target屬性替換Label(其中focu設置s到針對使用鍵盤時的控制例如ALT + C在下面的示例代碼),因爲這是所有Label真的提供超過TextBlock

然而,Label使用TextBlock呈現文本(字符串是否被放置在Content屬性,它通常是要);因此,你可以添加一個樣式TextBlockLabel內像這樣:

<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" /> 

這樣你能保持一個Label的功能,同時還能夠自動換行。

65

我用下面的代碼。

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

嘗試使用這種

lblresult.Content = lblresult.Content + "prime are :" + j + "\n"; 
3

我們需要把某種程度的控制,可以使文字像文本塊/文本

<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> 
2
<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> 
相關問題