拉伸WrapPanel内的两个按钮

时间:2014-11-22 14:59:09

标签: c# wpf

我正在从Windows Forms切换到WPF,我想复制GUI。因为只是通过转换器运行它会产生可怕的代码,所以我自己也试一试。虽然当我尝试创建一个简单的组合框时,它已经给我带来了麻烦。

我想创建这个:

enter image description here

但我最终得到了这个:

enter image description here

这是XAML:

<GroupBox Header="Search" Width="200">
    <StackPanel>
        <TextBox />
        <WrapPanel>
            <Button Content="Reset" />
            <Button Content="Search" />
        </WrapPanel>
    </StackPanel>
</GroupBox>

如果我玩HorizontalAlignment,它什么都不做。我想拉伸按钮(每个50%),但我似乎无法找到完成它的方法。我觉得好像WrapPanel可能不是正确的容器,但我找不到替代品。

2 个答案:

答案 0 :(得分:1)

您可以使用Grid容器或UniformGrid容器。

示例1 Grid代替WrapPanel):

<GroupBox Header="Search" Width="200">
  <StackPanel>
    <TextBox />
    <Grid>
      <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="*" />
      </Grid.ColumnDefinitions>

      <Button Grid.Column="0" Content="Reset" Margin="0,5,5,0" />
      <Button Grid.Column="1" Content="Search" Margin="5,5,0,0" />
    </Grid>
  </StackPanel>
</GroupBox>

示例2 (整个布局Grid):

<GroupBox Header="Search" Width="200">
  <Grid>
    <Grid.RowDefinitions>
      <RowDefinition Height="Auto" />
      <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="*" />
      <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>

    <TextBox Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" />

    <Button Grid.Row="1" Grid.Column="0" Content="Reset" Margin="0,5,5,0" />
    <Button Grid.Row="1" Grid.Column="1" Content="Search" Margin="5,5,0,0" />
  </Grid>
</GroupBox>

示例3 UniformGrid代替WrapPanel):

<GroupBox Header="Search" Width="200">
  <StackPanel>
    <TextBox />
    <UniformGrid Columns="2" Rows="1">
      <Button Content="Reset" Margin="0,5,5,0" />
      <Button Content="Search" Margin="5,5,0,0" />
    </UniformGrid>
  </StackPanel>
</GroupBox>

所有示例的结果布局:

enter image description here

有用的链接

答案 1 :(得分:1)

试试这个:

<GroupBox Header="Search" Width="200" >
    <GroupBox.Resources>
        <Style TargetType="{x:Type FrameworkElement}">
            <Setter Property="Margin" Value="4"></Setter>
        </Style>
        <Style TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type FrameworkElement}}" />
        <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type FrameworkElement}}" />
    </GroupBox.Resources>
    <StackPanel Margin="2">
        <TextBox />
        <UniformGrid Rows="1">
            <Button Content="Reset" />
            <Button Content="Search" IsDefault="True" />
        </UniformGrid>
    </StackPanel>
</GroupBox>