下面是我使用的一个例子:
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<WrapPanel Orientation="Horizontal" TextElement.FontSize="30" TextElement.FontStyle="Italic" >
<Button Content="test1" Margin="10,0" Padding="10,10" />
<Button Content="test2" Margin="10,0" Padding="10,10" />
<Button Content="test3" Margin="10,0" Padding="10,10" />
<Button Content="test4" Margin="10,0" Padding="10,10" />
<Button Content="test5" Margin="10,0" Padding="10,10" />
</WrapPanel>
</StackPanel>
如您所见,我的换行面板有几个按钮。每个按钮都有相同的边距和填充。
问题是,有没有一种方法可以为wrap面板设置margin和padding,这样wrap面板中的每个元素都可以使用它的值?
对于设置内部元素的字体,我可以使用“TextElement”附加属性提供程序。有没有类似的方法可以设置内部控件的边距和填充?
这使代码更短,让我指定边距和填充只有一次,而不是设置它的每个控制面板。
谢谢你!
5条答案
按热度按时间mwyxok5s1#
James Hay提供的解决方案是实现您所需结果的最简单方法。
然而,还有其他可能的解决方案:
1.您可以为
WrapPanel
实现自己的附加属性/行为,为它的所有子节点设置Margin
和/或Padding
。详情请参见this CodeProject article by Josh Smith。1.您可以创建自己的面板,它继承自
WrapPanel
,只需添加所需的属性并覆盖适当的方法,以便为所有子元素设置Margin
/Padding
。1.您还可以将
Style
定义从Window.Resources
移动到WrapPanel.Resources
,从Style
中删除x:Key
属性,并从所有Button
中删除Style="{StaticResource ButtonStyle}"
。这样,Style
被应用到 * 所有 *Button
,它们是WrapPanel
的子节点。如果您还有其他控件作为子控件,则可以将Style
的TargetType
更改为适当的公共基类型(例如FrameworkElement
):但是,请注意,这将影响
WrapPanel
中的 * 所有 *Button
示例,而不仅仅是它的直接子示例!pjngdqdw2#
另一个很好的方法可以在这里看到:http://blogs.microsoft.co.il/blogs/eladkatz/archive/2011/05/29/what-is-the-easiest-way-to-set-spacing-between-items-in-stackpanel.aspx
它展示了如何创建一个附加的行为,以便像这样的语法可以工作:
这是为面板的几个子面板设置边距的最简单、最快速的方法,即使它们不是同一类型。(即按钮、文本框、组合框等)
huus2vyu3#
WrapPanel没有任何向其所有子级添加填充或边距的属性。您可能需要的是每个按钮共享的样式。类似于:
vshtjzan4#
下面是一个自定义的WrapPanel控件,它添加了ItemMargin依赖项属性。
现在你可以做:
9cbw7uwe5#
如果面板中的项目不多,您可以使用Line控件,并在WrapPanel的情况下给予宽度,在StackPanel的情况下为其指定高度。然后,您可以设置线条的样式。