Windows Phone应用程序 - 如何根据设备宽度进行文本换行

时间:2013-12-08 10:16:19

标签: xaml windows-phone-7 textblock textwrapping texttrimming

在我的应用程序中,我有一个列表框,其中包含带有文本块项的堆栈面板。文本块项目具有文本换行或文本修剪属性,以避免文本块项目滑动到可见范围之外。

据我所知,文本换行和文本修剪属性需要固定宽度才能插入换行符。出于这个原因,我为标题(宽度=“456”)和描述(宽度=“432”)设置了固定宽度:

<ListBox x:Name="CategoryList" ItemsSource="{Binding}">
  <ListBox.ItemTemplate>
    <DataTemplate>
      <StackPanel Orientation="Horizontal" Margin="0,0,0,17">
        <StackPanel>
          <TextBlock 
            Style="{StaticResource PhoneTextLargeStyle}"
            Text="{Binding Name}" 
            TextTrimming="WordEllipsis"                                    
            Width="456"                                    
          />
          <TextBlock 
            Style="{StaticResource PhoneTextSubtleStyle}"
            Margin="12,-6,12,0" 
            Text="{Binding ContentDescription}"  
            TextWrapping="Wrap"                                                            
            Width="432"                                    
          />
        </StackPanel>
      </StackPanel>
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

现在的问题是,当我转动手机时,水平模式的固定宽度太小。有没有办法根据设备宽度来取代固定宽度的宽度?

截图: enter image description here

1 个答案:

答案 0 :(得分:1)

一般来说,在XAML中使用固定宽度/高度(对于“整个”页面(100%))从来都不是一个好主意,因为XAML旨在为您完成这项工作,因此您可能专注于您的布局和技术涵盖不同屏幕和尺寸的方面。

因此,如果您使用固定宽度来显示......在整个页面上它是一个非常好的指标 出错了

在你的情况下,你已经错误地使用了StackPanels。 StackPanels的设计方式是,它们的大小不限于其方向。这意味着,将其方向设置为水平的StackPanel可能会在宽度上不确定地增长,并且方向设置为垂直的sp的高度不会受到限制。

现在这引出了我们的问题:你在一个高度不断增长的元素(两个堆叠面板)中使用了一个宽度不断增长的元素。 即使你可能通过一些技巧限制它们的大小(例如,这可以通过一些数据绑定来实现),但这不是应该做的。

我会说 - 因为在父StackPanel中没有任何堆叠 - 用其他面板/容器替换它(或者只是删除它),你的问题就会消失。

实施例

<DataTemplate>
 <!-- If you need more child elements uncomment the following line -->
 <!-- <Grid> -->
 <StackPanel Margin="0,0,0,17">
  <TextBlock ... />
  <!-- no need to set width on the following textblock -->
  <TextBlock ... TextWrapping="Wrap" />
 </StackPanel>
 <!-- </Grid> -->
</DataTemplate>