将换行符/新行添加到WPF Wrap Panel

16

有人知道在WPF Wrap面板中是否可以输入换行符吗?这与Wrap面板的设计初衷相违背,所以我不确定是否可能。

如果不行,是否有其他WPF控件可以允许我输入换行符并支持添加子元素(我的自定义控件)?


一个WrapPanel容纳UI元素,你可以在任何地方添加自己的自定义控件。请澄清您想要实现的目标以及您在哪里遇到了困难。 - Jay
1
@Jay- 我想在 WPF Wrap 面板中插入一个换行符。这是我的困难和我想要实现的目标。 - Dominic K
2个回答

26
public class NewLine : FrameworkElement
{
    public NewLine()
    {
        Height = 0;
        var binding = new Binding
        {
            RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor, typeof(WrapPanel), 1),
            Path = new PropertyPath("ActualWidth")
        };
        BindingOperations.SetBinding(this, WidthProperty, binding);
    }
}

<WrapPanel>
    <TextBox Text="Text1"/>
    <TextBox Text="Text2"/>
    <my:NewLine/>
    <TextBox Text="Text3"/>
    <TextBox Text="Text4"/>
</WrapPanel>

7
在回答中至少包含代码的简要解释总是更好的。 - PeterJ
@PeterJ,但在这里看起来很简单,不需要解释。 - Andrey K.
3
这真的应该成为被采纳的答案。完全符合提问者的要求。Jay的解决方案只是一个权宜之计。 - henon
1
巧妙!这不仅限于文本使用。 - t9mike

18

这是WrapPanel中的换行符:

<WrapPanel>
    <TextBlock Text="&#xD;"/>
</WrapPanel>

更新

我想我已经理解了你想要问的内容。如果您有一个按行布局的WrapPanel,并且您想强制它进入下一行,您可以将单个WrapPanel替换为:

 <StackPanel Orientation="Vertical">
  <StackPanel Orientation="Horizontal">
   <!-- items -->
  </StackPanel>
  <StackPanel Orientation="Horizontal">
   <!-- items -->
  </StackPanel>
  <StackPanel Orientation="Horizontal">
   <!-- items -->
  </StackPanel>
 </StackPanel>

如果您想保留单个行的换行,可以在垂直的 StackPanel 里使用 WrapPanel


是的,你的更新正是我所思考的!我现在唯一的问题是,我正在通过编程方式添加元素,如下所示:wrapPanel.children.add(element)。然而,如果我为每个换行符创建一个新的stackpanel,我必须将wrapPanel/stackPanel更改为stackPanel2。是否有一种方法可以将元素添加到最新的面板中? - Dominic K
@DMan WrapPanel latestPanel = new WrapPanel(); 每次创建新的 StackPanelWrapPanel 时,将其分配给 latestPanel,然后向其中添加子元素。 - Jay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接