XAML TextBlock报错:无法共存文本与LineBreak及Text属性重复设置
解决TextBlock的XAML解析错误问题
错误原因分析
第一个错误「无法在属性元素中同时包含文本‘line1’和子元素‘LineBreak’」:
TextBlock的直接子元素要求是Inline类型(如Run、LineBreak),直接写文本会被隐式转为Run,但混合文本节点和LineBreak元素会导致XAML解析器无法正确处理内容模型,从而报错。第二个错误「Text属性被多次设置」:
你在显式使用<TextBlock.Text>属性元素的同时,还在其中混入了LineBreak元素(而Text属性仅支持字符串值),加上解析器对混合内容的误判,导致被认为重复设置了Text属性。
解决方案
方案1:使用Inline元素构建内容(推荐,支持更丰富的文本格式)
将文本用Run元素包裹,和LineBreak一起作为TextBlock的直接子元素,符合XAML内容模型要求:
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" TextAlignment="Center" TextWrapping="Wrap" Margin="15"> <Run Text="line1"/> <LineBreak/> <LineBreak/> <Run Text="line2"/> <TextBlock.Style> <Style TargetType="{x:Type TextBlock}"> <Setter Property="Visibility" Value="Hidden"/> <Style.Triggers> <DataTrigger Binding="{Binding State}" Value="ShowText"> <Setter Property="Visibility" Value="Visible"/> </DataTrigger> </Style.Triggers> </Style> </TextBlock.Style> </TextBlock>
方案2:直接设置Text属性(仅适用于纯文本换行)
如果不需要复杂的文本格式,可以直接在Text属性中使用XML换行符 实现换行,避免使用LineBreak元素:
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" TextAlignment="Center" TextWrapping="Wrap" Margin="15"> <TextBlock.Text>line1 line2</TextBlock.Text> <TextBlock.Style> <Style TargetType="{x:Type TextBlock}"> <Setter Property="Visibility" Value="Hidden"/> <Style.Triggers> <DataTrigger Binding="{Binding State}" Value="ShowText"> <Setter Property="Visibility" Value="Visible"/> </DataTrigger> </Style.Triggers> </Style> </TextBlock.Style> </TextBlock>
内容的提问来源于stack exchange,提问作者Inshallah
相关产品推荐
相关产品推荐

