是否可以将内容包装在StackPanel
?
我知道我们可以使用WrapPanel
代替。
但是出于代码修改的原因,我必须使用StackPanel
。
那么,有没有办法在说出5个项目之后在StackPanel
包装中制作物品......
谢谢!
答案 0 :(得分:13)
创建包含所需项目数的嵌套StackPanel
。
在下面的示例中,您有两行,分别由<StackPanel Orientation="Horizontal">
元素占用,每行包含五个将水平显示的项目。
<StackPanel Orientation="Vertical">
<StackPanel Orientation="Horizontal">
<Item1 />
<Item2 />
<Item3 />
<Item4 />
<Item5 />
</StackPanel>
<StackPanel Orientation="Horizontal">
<Item1 />
<Item2 />
<Item3 />
<Item4 />
<Item5 />
</StackPanel>
</StackPanel>
答案 1 :(得分:13)
对我来说,一个简单的<WrapPanel Orientation="Horizontal" Width="500" />
可以正常工作:
StackPanel
不在<!DOCTYPE html>
<html>
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.0.272/jspdf.debug.js"></script>
<body>
<p id="to-pdf">HTML content...</p>
</body>
<script>
var pdf = new jsPDF('p', 'pt', 'a4');
var pdfFile;
pdf.addHTML(document.body, function() {
console.log(pdf);
var pdfBlob = pdf.output('blob');
var fileURL = URL.createObjectURL(pdfBlob);
window.open(fileURL);
});
</script>
</html>
或任何其他容器内。在某些情况下,将宽度设置为常量值可能会更好,因为将其绑定到 ActualWidth 可以防止缩小(例如,当父控件缩小时) ,WrapPanel不是)
答案 2 :(得分:9)
<StackPanel>
<StackPanel.Style>
<Style TargetType="{x:Type StackPanel}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type StackPanel}">
<WrapPanel/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</StackPanel.Style>
</StackPanel>
答案 3 :(得分:4)
根据您的情况,您可以使用UniformGrid。还可以找到一些示例here。
您可以将其定义为包含5个这样的项目。
<UniformGrid Columns="5">
<Button />
<Button />
<Button />
</UniformGrid>
然而,每个项目的宽度都相同,所以不确定这是否适合你。
答案 4 :(得分:0)
我不认为没有包装面板就可以做到。也许你可以尝试将一个wrapPanel放在堆栈面板中 - 将其宽度设置为堆栈面板的实际宽度。您可以像Width="{Binding ActualWidth, ElementName=StackPanel1}"
但这只是一个黑客 - 我认为包装面板最适合您的需求。
答案 5 :(得分:0)
我在按钮上放了一块面板。它不会影响按钮背景。然后,在VB代码我用Chr(12)
,以指示线饲料:
Button1.Content = "first line" + Chr(12) + "second line"
您可以使用Chr(12)
添加更多行。