c# winform比較 - 如何使用WPF將文本包裝到標籤中?




style教學 style繼承 (9)

我有一個TextBox和一個標籤。 點擊一個按鈕後,我執行下面的代碼:

 label1.Content = textbox1.Text; 

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


Answers

您可以在標籤中放置一個TextBlock:

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

我使用了下面的代碼。

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

Label控件不直接支持WPF中的文本換行。 您應該改用TextBlock 。 (當然,如果您願意,您可以將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>

嘗試使用這個

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>

通常,您無法使用TextBlock替換Label ,因為您希望使用Target屬性(在使用鍵盤時將焦點設置為目標控件,例如下面的示例代碼中的ALT + C),因為這是Label實際上提供的TextBlock

但是, Label使用TextBlock來呈現文本(如果字符串放置在Content屬性中,通常是這樣); 因此,您可以為Label內的TextBlock添加樣式,如下所示:

<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的功能,同時也可以包裝文本。


我們需要進行某種控制,可以像文本塊/文本框一樣包裝文本

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

要在標籤控件中包裝文本,請按如下方式更改標籤的模板:

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

我知道的最好的方式是因為閏年和一切:

DateTime birthDate = new DateTime(2000,3,1);
int age = (int)Math.Floor((DateTime.Now - birthDate).TotalDays / 365.25D);

希望這可以幫助。





c# .net wpf label textwrapping