Silverlight 4:Listbox不';当它的物品缩水时,它不会缩水
从中,我将问题深入到一个listbox,当listbox项收缩时,它不会调整大小。当项目的大小增大时,它会相应地调整大小,但当项目的大小减小时,它不会收缩 这些项可以增长/收缩,因为这些项包含文本框,文本框随输入调整大小 Jeremiah建议开始一个新问题,并显示更多代码,因此我们开始: 我们的邪恶列表框是UserControl的一部分,它包含一个带有标签(HorizontalAlignment=Center)、列表框(HA=Left)和按钮(HA=Right)的StackPanel。listbox项是数据链接到ObservableCollection的 您将在ListBox和ListBoxItems上识别美丽的背景色。我用它们来判断这些项目或列表框本身是否收缩。我发现,项目缩小了,但列表框没有 好的,下面是我的UserControl的代码:Silverlight 4:Listbox不';当它的物品缩水时,它不会缩水,silverlight,listbox,Silverlight,Listbox,从中,我将问题深入到一个listbox,当listbox项收缩时,它不会调整大小。当项目的大小增大时,它会相应地调整大小,但当项目的大小减小时,它不会收缩 这些项可以增长/收缩,因为这些项包含文本框,文本框随输入调整大小 Jeremiah建议开始一个新问题,并显示更多代码,因此我们开始: 我们的邪恶列表框是UserControl的一部分,它包含一个带有标签(HorizontalAlignment=Center)、列表框(HA=Left)和按钮(HA=Right)的StackPanel。listb
<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>
我不知道为什么当项目的大小缩小时列表框不会缩小,尽管我已经将列表框的大小设置为“自动”,将“水平对齐”设置为“左”
提前感谢,,
弗兰克嗯。。。我没有你所有的代码。但是,我将上面的内容简化为这个,它是有效的 我希望这能在某种程度上帮助你解决你的问题。同样,它可能是导致问题的该控件的父控件。它也可能是您正在应用的样式之一。试着从你的控制中去掉所有不需要的东西,然后慢慢地把它们加回去,找到罪魁祸首 我创建了一个新的silverlight应用程序,这实际上是其中唯一的东西。列表框会按预期的大小增减 XAML:
我终于找到了解决办法。问题是,从Silverlight3开始,ListBox使用VirtualizationStackPanel显示ListItems。除了StackPanel之外,VirtualizationStackPanel使用它获得的所有空间,从不将其返回。因此,当列表中最大的项目收缩时,列表框本身可能会收缩,因为现在有未使用的空间,列表框的宽度(以及高度)将保持不变,因为VirtualizationStackPanel没有正确收缩 为了解决这个问题,我们可以强制ListBox使用StackPanel而不是VirtualizationStackPanel。请注意,这可能会以性能为代价
<ListBox HorizontalContentAlignment="Left" FontSize="9.333" HorizontalAlignment="Left">
... // other listbox related stuff
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
... // 其他列表框相关的东西
我还没有解决这个问题,但由于它不是最优先考虑的问题,所以在实现其他功能之前,它将被搁置。我认为这可能是因为UC的父对象是画布,但当将其放置在网格中时,问题仍然存在。如果我以某种方式完成了它,我会报告回来。当我的表上再次出现这个问题时,我发现,当元素的大小改变时,列表框不会缩小,但当项目列表改变时(列表框可能会重新呈现内容)。但是,如果只是通过删除文本来更改最大行的大小,则在添加(或删除)项目时,列表框的大小只会缩小,感谢您花时间将此解决方案发布到您自己的问题。我也有同样的问题,这很有效!
using System;
using System.Windows;
using System.Windows.Controls;
namespace Test
{
public partial class MainPage : UserControl
{
public MainPage()
{
// Required to initialize variables
InitializeComponent();
Count = 8;
}
private int Count;
private void Add_Click(object sender, System.Windows.RoutedEventArgs e)
{
Count = Count * 8;
ListBox.Items.Add("Hi Mom (" + Count.ToString() + ")");
}
private void Remove_Click(object sender, System.Windows.RoutedEventArgs e)
{
ListBox.Items.RemoveAt(ListBox.Items.Count-1);
}
}
}
<ListBox HorizontalContentAlignment="Left" FontSize="9.333" HorizontalAlignment="Left">
... // other listbox related stuff
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>