Horizo​​ntalAlignment = Stretch,MaxWidth和左alignment在同一时间?

这似乎应该很容易,但我很难过。 在WPF中,我想要一个伸展到它的父宽度,但只有一个最大宽度的文本框。 问题是,我希望它在其父母中被左alignment。 为了让它伸展,你必须使用Horizo​​ntalAlignment =“Stretch”,但结果是居中。 我已经尝试了Horizo​​ntalContentAlignment,但它似乎没有做任何事情。

我怎么得到这个蓝色的文本框,随着窗口的大小增长,最大宽度为200像素,并左alignment?

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <StackPanel> <TextBox Background="Azure" Text="Hello" HorizontalAlignment="Stretch" MaxWidth="200" /> </StackPanel> </Page> 

有什么窍门?

您可以将HorizontalAlignment设置为Left,设置MaxWidth ,然后将Width绑定到父元素的ActualWidth

 <Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <StackPanel Name="Container"> <TextBox Background="Azure" Width="{Binding ElementName=Container,Path=ActualWidth}" Text="Hello" HorizontalAlignment="Left" MaxWidth="200" /> </StackPanel> </Page> 
 <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" MaxWidth="200"/> </Grid.ColumnDefinitions> <TextBox Background="Azure" Text="Hello" /> </Grid> 

两个答案给出了我说的问题 – 谢谢!

但是在我的真实应用中,我试图限制ScrollViewer中的一个面板,而Kent的方法由于某种原因没有处理得很好,所以我没有打算跟踪。 基本上控制可能扩大超出MaxWidth设置,并打败了我的意图。

尼尔的技术运行良好,并没有与ScrollViewer的问题,但有一个小问题要注意。 您要确保文本框的左右边距都设置为0,否则会妨碍您的工作。 我也改变了绑定使用ViewportWidth而不是ActualWidth来避免垂直滚动条出现时的问题。

你可以使用这个DataTemplate的宽度:

 Width="{Binding ActualWidth,RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ScrollContentPresenter}}}" 

确保你的DataTemplate根目录的Margin =“0”(你可以使用一些面板作为根目录,并将Margin设置为该根目录的子目录)

我会使用SharedGroupSize

 <Grid> <Grid.ColumnDefinition> <ColumnDefinition SharedGroupSize="col1"></ColumnDefinition> <ColumnDefinition SharedGroupSize="col2"></ColumnDefinition> </Grid.ColumnDefinition> <TextBox Background="Azure" Text="Hello" Grid.Column="1" MaxWidth="200" /> </Grid>