首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何分隔StackPanel的子元素?

如何分隔StackPanel的子元素?
EN

Stack Overflow用户
提问于 2009-05-31 17:34:04
回答 7查看 175.4K关注 0票数 201

给定一个StackPanel:

代码语言:javascript
复制
<StackPanel>
  <TextBox Height="30">Apple</TextBox>
  <TextBox Height="80">Banana</TextBox>
  <TextBox Height="120">Cherry</TextBox>
</StackPanel>

即使子元素本身具有不同的大小,怎样才能使子元素之间有相同大小的间距?是否可以在不为每个单独的子项设置属性的情况下完成此操作?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-05-31 18:39:47

使用边距或填充,应用于容器内的作用域:

代码语言:javascript
复制
<StackPanel>
    <StackPanel.Resources>
        <Style TargetType="{x:Type TextBox}">
            <Setter Property="Margin" Value="0,10,0,0"/>
        </Style>
    </StackPanel.Resources> 
    <TextBox Text="Apple"/>
    <TextBox Text="Banana"/>
    <TextBox Text="Cherry"/>
</StackPanel>

编辑:如果您想要重用两个容器之间的边距,您可以将边距值转换为外部作用域f.e.中的资源。

代码语言:javascript
复制
<Window.Resources>
    <Thickness x:Key="tbMargin">0,10,0,0</Thickness>
</Window.Resources>

,然后在内部作用域中引用此值。

代码语言:javascript
复制
<StackPanel.Resources>
    <Style TargetType="{x:Type TextBox}">
        <Setter Property="Margin" Value="{StaticResource tbMargin}"/>
    </Style>
</StackPanel.Resources>
票数 310
EN

Stack Overflow用户

发布于 2011-05-30 06:29:12

另一个很好的方法可以在这里看到:http://blogs.microsoft.co.il/blogs/eladkatz/archive/2011/05/29/what-is-the-easiest-way-to-set-spacing-between-items-in-stackpanel.aspx链接是这个链接的坏掉的-> this is webarchive

它展示了如何创建附加的行为,以便像这样的语法可以工作:

代码语言:javascript
复制
<StackPanel local:MarginSetter.Margin="5">
   <TextBox Text="hello" />
   <Button Content="hello" />
   <Button Content="hello" />
</StackPanel>

这是为面板的多个子项设置边距的最简单、最快速的方法,即使它们不属于同一类型。(即按钮、TextBoxes、ComboBoxes等)

票数 91
EN

Stack Overflow用户

发布于 2015-06-16 18:18:32

你真正想做的事情是包装所有子元素。在这种情况下,你应该使用一个items控件,而不是求助于可怕的附加属性,因为你想要样式化的每个属性都会有一百万个这样的属性。

代码语言:javascript
复制
<ItemsControl>

    <!-- target the wrapper parent of the child with a style -->
    <ItemsControl.ItemContainerStyle>
        <Style TargetType="Control">
            <Setter Property="Margin" Value="0 0 5 0"></Setter>
        </Style>
    </ItemsControl.ItemContainerStyle>

    <!-- use a stack panel as the main container -->
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Horizontal"/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>

    <!-- put in your children -->
    <ItemsControl.Items>
        <Label>Auto Zoom Reset?</Label>
        <CheckBox x:Name="AutoResetZoom"/>
        <Button x:Name="ProceedButton" Click="ProceedButton_OnClick">Next</Button>
        <ComboBox SelectedItem="{Binding LogLevel }" ItemsSource="{Binding LogLevels}" />
    </ItemsControl.Items>
</ItemsControl>

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/932510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档