1

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

据我所知,文本换行和文本修剪属性需要固定宽度才能插入换行符。为此,我为标题 (Width="456") 和描述 (Width="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>

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

截屏: 在此处输入图像描述

4

1 回答 1

1

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

因此,如果您使用固定宽度来显示某事。在整个页面上,它是一个很好的指标,表明有问题

在您的情况下,您错误地使用了 StackPanels。StackPanel 的设计方式使其大小不受方向方向的限制。这意味着,将方向设置为水平的 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>
于 2013-12-08T14:35:25.290 回答