Silverlight 4:当项目缩小时,列表框不会缩小

Aag*_*nor 5 silverlight listbox

这个问题中,我将问题深入到列表框中,当Listbox-Items缩小时,该列表框不会调整大小.当项目的大小增加时,它会相应地调整大小,但是当项目的大小减小时,它不会缩小.

项目可以增长/缩小,因为包含文本框的项目会随输入调整大小.

Jeremiah建议用更多代码开始一个新问题,所以我们走了:

我们的邪恶列表框是UserControl的一部分,它包含一个带有Label(Horizo​​ntalAlignment = Center)的StackPanel,列表框(HA = Left)和一个Button(HA = Right).listbox-items被数据链接到ObservableCollection

您将识别ListBox和ListBoxItems上的漂亮BackgroundColors.我用它们来告诉项目或列表框本身不会缩小.我发现,项目缩小,但列表框没有.

好的,这是我的UserControl的代码:

<StackPanel VerticalAlignment="Top" HorizontalAlignment="Left">
  <StackPanel.Background>
    <SolidColorBrush Color="{StaticResource ColorBasicDark}"/>
  </StackPanel.Background>

  <sdk:Label x:Name="LabelServiceName" FontSize="{StaticResource FontSizeMedium}" Margin="2" HorizontalAlignment="Center" Content="LabelServiceName">
    <sdk:Label.Foreground>
      <SolidColorBrush Color="{StaticResource ColorBasicLight}"/>
    </sdk:Label.Foreground>
  </sdk:Label>

  <ListBox x:Name="ListBoxCharacteristics" BorderBrush="{x:Null}" Margin="0" HorizontalContentAlignment="Left" FontSize="9.333" HorizontalAlignment="Left">
    <ListBox.Foreground>
      <SolidColorBrush Color="{StaticResource ColorBasicLight}"/>
    </ListBox.Foreground>

    <!-- DataTemplate to display the content -->
    <ListBox.ItemTemplate>
      <DataTemplate>
        <StackPanel x:Name="StackPanelBorder" Orientation="Horizontal" HorizontalAlignment="Left">
          <TextBox x:Name="TextBoxCharacteristicName" Style="{StaticResource InputTextBox}" Text="{Binding Name}" />
          <TextBox x:Name="TextBoxSep" Style="{StaticResource ReadOnlyTextBox}" Text="=" />
          <TextBox x:Name="TextBoxFuncOrValue" Style="{StaticResource InputTextBox}" Text="{Binding Value.Text}" />
          <TextBox x:Name="TextBoxValue" Style="{StaticResource ReadOnlyTextBox}" />
          <Button x:Name="ButtonRemove" Style="{StaticResource BasicButtonStyle}" Content="-" Click="ButtonRemove_Click" />
        </StackPanel>
      </DataTemplate>
    </ListBox.ItemTemplate>

    <ListBox.ItemContainerStyle>
      <Style TargetType="ListBoxItem">
        <Setter Property="HorizontalAlignment" Value="Left" />
        <Setter Property="Background" Value="Yellow" />
      </Style>
    </ListBox.ItemContainerStyle>

    <ListBox.Background>
      <SolidColorBrush Color="Red" />
    </ListBox.Background>
  </ListBox>

  <Button x:Name="ButtonAddCharaDisplayObject" Style="{StaticResource BasicButtonStyle}" Content="+" HorizontalAlignment="Right" Click="ButtonAddCharaDisplayObject_Click" />
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

虽然我已将列表框的大小设置为Auto,而将Horizo​​ntalAlignment设置为Left,但我不知道为什么列表框在缩小项目大小时不会缩小

先谢谢你,弗兰克

Aag*_*nor 5

我终于在这篇文章中找到了解决方案.问题是,从Silverlight 3开始,ListBox使用VirtualizationStackPanel来显示ListItems.除了StackPanel之外,VirtualizationStackPanel使用它获得的所有空间并且永远不会将其返回.因此,当列表中的最大项目缩小时,因此ListBox本身可能会缩小,因为现在存在未使用的空间,ListBox的宽度(以及此类的高度)仍将保持不变,因为VirtualizationStackPanel未正确收缩.

要解决这个问题,我们可以强制ListBox使用StackPanel而不是VirtualizationStackPanel.请注意,这可能会以性能为代价!

<ListBox HorizontalContentAlignment="Left" FontSize="9.333" HorizontalAlignment="Left"> 

    ... // other listbox related stuff

    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel />
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>

</ListBox> 
Run Code Online (Sandbox Code Playgroud)