这看起来应该很简单,但我被难住了。在WPF中,我想要一个文本框,它可以拉伸到其父文本框的宽度,但只能拉伸到最大宽度。问题是,我希望它在其父文本框中左对齐。要使它拉伸,你必须使用HorizontalAlignment=“Stretch”,但结果是居中的。我已经试验过HorizontalContentAlignment,但它似乎没有任何作用。
如何使此蓝色文本框随窗口的大小增长,最大宽度为200像素,并左对齐?
<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>
有什么诀窍?
9条答案
按热度按时间68bkxrlz1#
您可以将
HorizontalAlignment
设置为Left,设置您的MaxWidth
,然后将Width
绑定到父元素的ActualWidth
:bvjxkvbb2#
vhipe2zx3#
给出的两个答案都对我所说的问题有效--谢谢!
在我的真实的应用程序中,我试图约束ScrollViewer内部的面板,但肯特的方法处理得不太好,原因我没有去追查。基本上,控件可能会扩展到MaxWidth设置之外,从而破坏了我的意图。
Nir的技术运行得很好,在ScrollViewer中没有出现问题,不过有一点需要注意。您需要确保TextBox的左右边距设置为0,否则它们会妨碍操作。我还将绑定改为使用ViewportWidth而不是ActualWidth,以避免出现垂直滚动条时出现问题。
yks3o0rb4#
您可以将此值用于DataTemplate的宽度:
确保DataTemplate根的Margin=“0”(您可以使用某个面板作为根,并将Margin设置为该根的子级)
a7qyws3x5#
功能上类似于接受的答案,但不需要指定父元素:
wko9yo5t6#
也许我仍然可以帮助那些遇到这个问题的人,因为这是一个非常古老的问题。
我也需要这个,并写了一个行为来处理这个问题。下面是这个行为:
然后您可以这样使用它:
注意:不要忘记使用
System.Windows.Interactivity
命名空间来使用该行为。7eumitmz7#
我会使用
SharedSizeGroup
dhxwm5r48#
在我的例子中,我不得不把文本框放到一个堆栈面板中,以便拉伸左边的文本框。感谢之前的帖子。只是作为一个例子,我设置了一个背景颜色,看看当窗口大小改变时会发生什么。
vktxenjb9#
这些答案对我不起作用,因为我需要一个
TextBox
来拉伸(即消耗所有可用空间),直到它达到它的MaxWidth
,如果有更多的可用空间,则向右对齐。我创建了这个简单的控件,它沿着YC的答案工作,但不需要
System.Windows.Interactivity
:它可以这样使用: