WP8 列表框数据模板在堆栈面板宽度为全宽时引发异常

本文关键字:异常 列表 数据 堆栈 WP8 | 更新日期: 2023-09-27 18:36:39

确切的 XAML 代码如下所示:

    <ListBox.ItemTemplate>
            <DataTemplate>
            <StackPanel Margin="6,6,6,6"
                        Background="Gray"
                        Orientation="Vertical"
                        HorizontalAlignment="Left"
                        Width="*">
                        ...

其他宽度值运行完美。

WP8 列表框数据模板在堆栈面板宽度为全宽时引发异常

从 MSDN :

对象的宽度(以像素为单位)。默认值为 Double.NaN。除了 对于特殊的 Double.NaN 值,此值必须等于 或 大于 0。有关上限信息,请参阅备注

它不能*作为价值。它唯一可以采用的特殊值是Double.NaN(表示自动行为):

Height and Width 的默认值不是 0;它是 Double.NaN。 高度和宽度支持未设置的"自动"值。 由于高度和宽度是双精度值,因此 Double.NaN 用作 表示此"自动"行为的特殊值。布局系统 将"Auto"值解释为通常意味着对象应该 调整为布局中的可用大小,而不是特定的大小 像素值。

也许您正在将 StackPanel Width 属性与专用于 Grid 的 ColumnDefinition 的属性混合在一起,它不是一个double,而是一个GridLength类型。

如果您希望您的StackPanel占据所有剩余空间的宽度,那么您必须将其放在Grid内:

<Grid>
  <Grid.ColumnDefinitions>
     <ColumnDefinition Width="*"/>
  </Grid.ColumnDefinitions>
  <StackPanel Margin="6,6,6,6"
              Background="Gray"
              Orientation="Vertical"
              HorizontalAlignment="Left">
  ...
</Grid>

您也可以尝试简单地将 StackPanel.HorizontalAlignement 属性设置为 Stretch 值。

如果这些建议都不起作用,则问题出在ListBoxItemListBox默认模板中。