【发布时间】:2017-03-31 11:40:16
【问题描述】:
我有一个简单的 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 的 TextWrap 属性设置为 Wrap。
根据this question 的答案中的建议,TextBlock 应该位于 Grid 容器内。但是 TextBlock 是在一个 Grid 容器中并且仍然没有换行。
当 TextBlock 超出其窗口大小时,如何使 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>
【问题讨论】:
-
查看 Grid 的 xaml 也会很有帮助,因为这主要是容器问题。
-
@MightyBadaboom,我用更多代码更新了这个问题。请看一看。
-
@avidProgrammer 当我在示例项目中插入代码并使用一些模拟文本时,ResultTxt TextBlock 会包装它的内容。嗯