WPF - TextBlock的文本不换行

3

我是一个简单的WPF窗口,其中包含以下XAML代码的TextBlock元素:

<TextBlock Grid.Row="3" Grid.Column="2" MaxWidth="370" 
x:Name="ResultTxt" Text="{Binding Text, Mode=OneWay}" TextWrapping="Wrap"></TextBlock>

当从服务器接收到新文本时,我将该文本附加到TextBlock内容中。以下是执行此操作的代码部分

Text = Text + e.Text; //e is an EventArgs
RaisePropertyChanged("Text");

当文本超出当前窗口限制时,它不会换行到新的一行。尽管我已将TextBlock的属性设置为Wrap,但它仍然只是继续水平延伸。
根据这个问题中的答案建议,TextBlock应该在Grid容器内部。但是,TextBlock已经在Grid容器中,但仍然没有换行。
如何使TextBlock在超出其窗口大小时换行? 编辑: 这里是整个Grid容器的XAML代码:
<Grid TextBlock.FontSize="16" DataContext="{Binding Main, Source={StaticResource Locator}}" HorizontalAlignment="Left" Width="760">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"></ColumnDefinition>
            <ColumnDefinition Width="Auto"></ColumnDefinition>
            <ColumnDefinition Width="Auto"></ColumnDefinition>
            <ColumnDefinition Width="Auto"></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <TextBlock Text="Capture Device" Margin="20,10,10,0"></TextBlock>
        <ComboBox ItemsSource="{Binding Path=CaptureDevices, Mode=OneWay}" DisplayMemberPath="ProductName" SelectedIndex="0" Margin="19,10,10,0" VerticalAlignment="Top" MinHeight="22" Grid.Row="0" Grid.Column="1" Name="DeviceCombo" SelectedItem="{Binding SelectedDevice, Mode=TwoWay}" IsEnabled="{Binding CanSelect}"/>
        <Slider Margin="19,10,10,0" Orientation="Horizontal" Value="{Binding MicrophoneLevel, Mode=TwoWay}" Maximum="100" Grid.Row="0" Grid.Column="2" Grid.ColumnSpan="2" IsEnabled="false" MaxWidth="150"/>
        <Button x:Name="StartBtn" Content="Start" Grid.Column="0" Grid.Row="1" Margin="30,10,5,25" Width="60" Command="{Binding StartRecodrding}" IsEnabled="{Binding CanStart}"/>
        <Button x:Name="StopBtn" Grid.Row="1" Content="Stop" Grid.Column="2" Margin="0,10,15,25" Width="60" Command="{Binding StopRecording}" IsEnabled="{Binding CanStop}"/>
        <ProgressBar x:Name="RecordLevel" Grid.Row="1" Grid.Column="3"  Margin="30,10,15,25" Minimum="0" Maximum="100" MinWidth="170" Value="{Binding CurrentLevel, Mode=OneWay}"></ProgressBar>
        <TextBlock x:Name="Status" Grid.Row="2" Grid.Column="2" Margin="15,15,10,10" Text="{Binding StatusText}"></TextBlock>
        <TextBlock Grid.Row="3" Grid.Column="2" MaxWidth="370" x:Name="ResultTxt" Text="{Binding Text, Mode=OneWay}" TextWrapping="Wrap"></TextBlock>
    </Grid>

3
如果能看到Grid的XAML代码就更有帮助了,因为这很可能是一个容器的问题。 - Mighty Badaboom
@MightyBadaboom,我更新了问题并添加了更多的代码,请您看一下。 - xabush
@avidProgrammer 当我将代码插入示例项目并使用一些模拟的文本时,ResultTxt TextBlock会自动换行。嗯。 - Mighty Badaboom
1个回答

1
第二列的宽度不应设置为“自动”。尝试将其设置为“*”:
<Grid.ColumnDefinitions>
    <ColumnDefinition Width="Auto"></ColumnDefinition>
    <ColumnDefinition Width="Auto"></ColumnDefinition>
    <ColumnDefinition Width="*"></ColumnDefinition>
    <ColumnDefinition Width="Auto"></ColumnDefinition>
</Grid.ColumnDefinitions>

您还应避免将 GridWidth 设置为固定值。请尝试使用 MaxWidth 代替:

<Grid TextBlock.FontSize="16" DataContext="{Binding Main, Source={StaticResource Locator}}" HorizontalAlignment="Left" MaxWidth="760">

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接