2015-04-02 70 views
1

Windows窗體,放置物品到FlowLayoutPanel的控制工作非常相同的方式,在的Windows Presentation Foundation(WPF)使用WrapPanel等同於 'FlowBreak' 屬性WPF WrapPanel

項目在FlowLayoutPanel中可以有FlowBreak屬性設置爲真正,表明有多少剩餘空間當前行中的面板應在項目之後移動到下一行的開始,不管。基本上它是說「在此之後換行」。

我現在正在爲項目使用WPF,並且我需要知道如何在使用WPF WrapPanel控件時完成等效操作。

我已經知道如何用蠻力做到這一點。我希望有一個更優雅和簡單的方法。有任何想法嗎?

+0

那麼你如何使用蠻力呢?如果你不解釋,那麼有人可以給你一個也使用暴力的答案。 – kennyzx 2015-04-02 02:51:45

+0

「暴力」我的意思是使用一系列嵌套的WrapPanels和/或StackPanels。 – 2015-04-02 03:21:21

回答

1

您可以使用這一招:

<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> 

enter image description here

如果你希望你的XAML是有點清潔/更清晰(即不具有約束力,並且虛擬Border),那麼你可以創建自己的FrameworkElement它的設計總是匹配的寬度祖先WrapPanel

NewLine元素在這裏: