我正在使用带有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>
答案 0 :(得分:1)
如果您希望StackPanel使用其中的项目水平调整大小,则需要将HorizontalAlignment从默认值“Stretch”更改为其他值。
默认情况下,stackpanel会拉伸以填充其父控件的整个空间,因为HorizontalAlignment设置为stretch。这使得它难以增大和缩小尺寸。
您需要将HorizontalAlignment设置为“Left”,“Right”或“Center”。然后,stackpanel将只与其内部的项目一样宽。但明智地选择,因为stackpanel将停靠在其父控件内的那个位置。
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
注意:如果这不能解决您的问题,那么您在使用父控件而不是StackPanel时会出现问题。
答案 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中使用Horizontal,则可能必须使用与ActualHeight绑定的Height属性。 “toolkit”可以作为xmlns包含在头文件中:toolkit =“http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit” 希望这会有所帮助。
答案 3 :(得分:-2)
你需要这样的东西:
<StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch">
此外,我不认为有一个文本框延伸是一个好主意,除非这是一个要求。您应该在文本框中指定宽度,使其不会拉伸。
此外,如果上述解决方案不起作用,那么您应该发布您的xaml,以便让我们查看文档大纲。