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

Xaml Windows Phone应用程序-如何根据设备宽度进行文本换行,xaml,windows-phone-7,textblock,word-wrap,texttrimming,Xaml,Windows Phone 7,Textblock,Word Wrap,Texttrimming,在我的应用程序中,我有一个列表框,其中包含一个带有文本块项目的堆栈面板。文本块项目具有文本环绕或文本修剪特性,以避免文本块项目滑出可见范围 据我所知,文本换行和文本修剪属性需要一个固定的宽度来插入换行符。因此,我为标题(width=“456”)和描述(width=“432”)设置了固定宽度: 现在的问题是,当我转动手机时,水平模式的固定宽度太小。有没有一种方法可以根据设备的宽度来代替固定的宽度 屏幕截图: 一般来说,在XAML中使用固定宽度/高度(用于“整个”页面(100%)从来都不是一个好

在我的应用程序中,我有一个列表框,其中包含一个带有文本块项目的堆栈面板。文本块项目具有文本环绕或文本修剪特性,以避免文本块项目滑出可见范围

据我所知,文本换行和文本修剪属性需要一个固定的宽度来插入换行符。因此,我为标题(width=“456”)和描述(width=“432”)设置了固定宽度:


现在的问题是,当我转动手机时,水平模式的固定宽度太小。有没有一种方法可以根据设备的宽度来代替固定的宽度

屏幕截图:

一般来说,在XAML中使用固定宽度/高度(用于“整个”页面(100%)从来都不是一个好主意),因为XAML是为您设计的,所以您可能会专注于布局,而且技术涵盖了不同屏幕和大小的方面

因此,如果你使用固定宽度在整个页面上显示某个内容,这是一个非常好的指示器表明有问题

在您的情况下,StackPanel的使用是错误的。堆叠面板的设计应确保其尺寸不受方向限制。这意味着,将方向设置为水平的StackPanel可能会在宽度上无限增长,而将方向设置为垂直的sp的高度不会受到限制

现在,这就引出了您的问题:您使用了宽度不定增长元素和高度不定增长元素(两个StackPanel)。 即使您可能会通过一些技巧限制它们的大小(例如,可以通过一些数据绑定实现),但这不是应该做的

我会说-因为在父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>

一般来说,在XAML中使用固定宽度/高度(对于“整个”页面(100%)并不是一个好主意),因为XAML是为您设计的,所以您可能会专注于布局,并且该技术涵盖了不同屏幕和大小的方面

因此,如果你使用固定宽度在整个页面上显示某个内容,这是一个非常好的指示器表明有问题

在您的情况下,StackPanel的使用是错误的。堆叠面板的设计应确保其尺寸不受方向限制。这意味着,将方向设置为水平的StackPanel可能会在宽度上无限增长,而将方向设置为垂直的sp的高度不会受到限制

现在,这就引出了您的问题:您使用了宽度不定增长元素和高度不定增长元素(两个StackPanel)。 即使您可能会通过一些技巧限制它们的大小(例如,可以通过一些数据绑定实现),但这不是应该做的

我会说-因为在父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>


我当前的解决方案是在发生“方向改变”事件时设置不同的(也是固定的)宽度。但还有其他解决方案吗?我目前的解决方案是在发生“方向改变”事件时设置不同的(也是固定的)宽度。但还有其他解决方案吗?我移除了第二个StackPanel,并将第一个StackPanel替换为“”。之后,我删除了文本块的宽度。成功了!谢谢。:)我移除了第二个StackPanel,并将第一个StackPanel替换为“”。之后,我删除了文本块的宽度。成功了!谢谢。:)