Silverlight 4:当内容变得更窄时,StackPanel不会调整大小

时间:2010-06-22 15:04:15

标签: silverlight stackpanel

我正在使用带有Blend 4的Silverlight 4。

我有一个(水平)stackpanel,包括一些TextBoxes和一个Button。 stackpanel设置为拉伸到内容使用的大小。 TextBox也在自动调整大小。

当我向Textboxes添加文本时,文本框大小会增加,堆栈面也会增长。到目前为止一切都很好。

当我从文本框中删除文本时,文本框大小会缩小(例外),但堆栈面大小不会缩小。

当内容(文本框)变小时,是否有任何技巧可以使堆叠面板更改大小?

提前致谢, 弗兰克

以下是UserControl的XAML:

<Grid x:Name="LayoutRoot">
  <StackPanel x:Name="StackPanelBorder" Orientation="Horizontal">
    <TextBox x:Name="TextBoxCharacteristicName" TextWrapping="Wrap" Text="Tex">
        </TextBox>
    <TextBox x:Name="TextBoxSep" TextWrapping="Wrap" Text="=" IsReadOnly="True">
        </TextBox>
    <Button x:Name="ButtonRemove" Content="-" Click="ButtonAddOrRemove_Click">
        </Button>
  </StackPanel>
</Grid>

4 个答案:

答案 0 :(得分:1)

如果您希望StackPanel使用其中的项目水平调整大小,则需要将Horizo​​ntalAlignment从默认值“Stretch”更改为其他值。

默认情况下,stackpanel会拉伸以填充其父控件的整个空间,因为Horizo​​ntalAlignment设置为stretch。这使得它难以增大和缩小尺寸。

您需要将Horizo​​ntalAlignment设置为“Left”,“Right”或“Center”。然后,stackpanel将只与其内部的项目一样宽。但明智地选择,因为stackpanel将停靠在其父控件内的那个位置。

<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">

注意:如果这不能解决您的问题,那么您在使用父控件而不是StackPanel时会出现问题。

MSDN website for HorizontalAlignment

答案 1 :(得分:0)

最好使用Grid。只需创建一个包含3个自动列的Grid,其大小将适合内容。

<Grid x:Name="LayoutRoot">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>
    <TextBox x:Name="TextBoxCharacteristicName" TextWrapping="Wrap" Text="Tex" Grid.Column="0"/>
    <TextBox x:Name="TextBoxSep" TextWrapping="Wrap" Text="=" IsReadOnly="True" Grid.Column="1"/>
    <Button x:Name="ButtonRemove" Content="-" Click="ButtonAddOrRemove_Click" Grid.Column="2"/>
</Grid>

在大多数情况下,使用Grid会更好。 StackPanel是一个有用的控件,但我经常觉得它被过度使用了。

答案 2 :(得分:0)

我修改了你的代码,如下所示。请检查。

<Grid x:Name="LayoutRoot">
  <ScrollViewer x:Name="PageScrollViewer" >
  <toolkit:WrapPanel x:Name="mywrapPanel" Orientation="Vertical" Width="{Binding ActualWidth, ElementName=LayoutRoot}">
    <TextBox x:Name="TextBoxCharacteristicName" TextWrapping="Wrap" Text="Tex" Width="{Binding ActualWidth, ElementName=mywrapPanel}">
        </TextBox>
    <TextBox x:Name="TextBoxSep" TextWrapping="Wrap" Text="=" IsReadOnly="True" Width="{Binding ActualWidth, ElementName=mywrapPanel}">
        </TextBox>
    <Button x:Name="ButtonRemove" Content="-" Click="ButtonAddOrRemove_Click" HorizontalAlignment="Right" Width="80" Margin="2">
        </Button>
  </toolkit:WrapPanel>
  </ScrollViewer>
</Grid>

如果在WrapPanel的Orientation中使用Horizo​​ntal,则可能必须使用与ActualHeight绑定的Height属性。 “toolkit”可以作为xmlns包含在头文件中:toolkit =“http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit” 希望这会有所帮助。

答案 3 :(得分:-2)

你需要这样的东西:

<StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch">

此外,我不认为有一个文本框延伸是一个好主意,除非这是一个要求。您应该在文本框中指定宽度,使其不会拉伸。

此外,如果上述解决方案不起作用,那么您应该发布您的xaml,以便让我们查看文档大纲。