您可以使用這一招:
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<WrapPanel x:Name="mywrappanel">
<TextBox Text="Text1"/>
<TextBox Text="Text2"/>
<TextBox Text="Text3"/>
<Border Width="{Binding Path=ActualWidth, ElementName=mywrappanel}"/>
<TextBox Text="Text4"/>
<TextBox Text="Text5"/>
</WrapPanel>
</Page>
它是做什麼用一個虛設的元素,沒有高度(所以它是「隱藏」),但寬度的WrapPanel
相匹配,所以你可以確定它不適合當前行,並「填充」下一個。
您可以使用任何FrameworkElement
派生元素作爲虛擬......只需選擇一個輕量級元素以避免不必要的內存使用。
如果您不想指定WrapPanel
例如您可以使用使用RelativeSource
的綁定,例如,
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<WrapPanel x:Name="mywrappanel">
<TextBox Text="Text1"/>
<TextBox Text="Text2"/>
<TextBox Text="Text3"/>
<Border Width="{Binding Path=ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type WrapPanel}}}"/>
<TextBox Text="Text4"/>
<TextBox Text="Text5"/>
</WrapPanel>
</Page>
爲了更好地觀察它在做什麼...只是給它一個高度和一些顏色。
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<WrapPanel x:Name="mywrappanel">
<TextBox Text="Text1"/>
<TextBox Text="Text2"/>
<TextBox Text="Text3"/>
<Border Height="20" Background="Red" Width="{Binding Path=ActualWidth, ElementName=mywrappanel}"/>
<TextBox Text="Text4"/>
<TextBox Text="Text5"/>
</WrapPanel>
</Page>
如果你希望你的XAML是有點清潔/更清晰(即不具有約束力,並且虛擬Border
),那麼你可以創建自己的FrameworkElement
它的設計總是匹配的寬度祖先WrapPanel
。
見NewLine
元素在這裏:
那麼你如何使用蠻力呢?如果你不解釋,那麼有人可以給你一個也使用暴力的答案。 – kennyzx 2015-04-02 02:51:45
「暴力」我的意思是使用一系列嵌套的WrapPanels和/或StackPanels。 – 2015-04-02 03:21:21