StackPanel内部的文本包装(WP7)

时间:2013-12-13 14:46:42

标签: c# wpf windows-phone-7

我想在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>

2 个答案:

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