我想在TextBlock
内包含三个StackPanel
中包含的文字而不为每个TextWrapping="Wrap"
撰写TextBlock
(有时可能会有更多这样的内容):
<ListBox ItemsSource="{Binding Places}" SelectedItem="{Binding SelectedPlace, Mode=TwoWay}">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalAlignment" Value="Stretch"/>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Path=Name, Mode=OneWay}" TextWrapping="Wrap" />
<TextBlock Text="{Binding Path=Distance, Mode=OneWay}" TextWrapping="Wrap" />
<TextBlock Text="{Binding Path=Description, Mode=OneWay}" TextWrapping="Wrap" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
因此,如果我动态添加另一个TextBlock
,它应该自动换行(我不想在我的代码隐藏文件中执行此操作)
换句话说 - 我想写自动应用的样式。在CSS中它会是这样的:
listbox textblock {
word-wrap:break-word;
}
更新
这包含我的ListBox:
<Grid Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<!--ContentPanel - place additional content here-->
<Grid x:Name="ContentPanel" Grid.Row="1" Grid.Column="0" Margin="12,0,12,0">
<views:ListItem Margin="12,6,0,0" />
</Grid>
</Grid>
答案 0 :(得分:1)
除非您为Width
指定TextBlock
约束,否则不会包装其文本内容。由于StackPanel
不调整其内容的大小,它永远不会将任何Width
约束传递给TextBlock
内部,因此他们永远不会换行。将TextWrapping
属性设置为Wrap
不足以使文本内容换行,因此使用此属性集应用Style
将不做你想做的事。
答案 1 :(得分:1)
您是否尝试为TextBlock
添加样式?即
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<StackPanel.Resources>
<Style TargetType="TextBlock">
<Setter Property="TextWrapping" Value="Wrap"/>
</Style>
</StackPanel.Resources>
...
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>