C# 将两个按钮拉伸到一个包装袋内

C# 将两个按钮拉伸到一个包装袋内,c#,wpf,C#,Wpf,我正在从Windows窗体切换到WPF,我想复制GUI。因为仅仅通过一个转换器运行它就会产生可怕的代码,所以我自己也在尝试。虽然当我尝试创建一个简单的groupbox时,它已经给我带来了麻烦 我想创建以下内容: 但我最终得出的结论是: 这是XAML: <GroupBox Header="Search" Width="200"> <StackPanel> <TextBox /> <WrapPanel>

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

我想创建以下内容:

但我最终得出的结论是:

这是XAML:

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


如果我玩
水平对齐
它什么都不做。我想拉伸按钮(每个按钮50%),但我似乎找不到一个方法来完成它。我觉得
WrapPanel
可能不是这里的合适容器,但我找不到替代方法。

您可以使用
网格
容器或
UniformGrid
容器

示例1
Grid
而不是
WrapPanel
):

示例3
UniformGrid
而不是
WrapPanel
):


所有示例的结果布局:

有用的链接

试试这个:

<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>


这看起来不错。太糟糕了,我必须为两个元素创建一个完整的
网格
,在我看来,在
WrapPanel
中会更优雅。谢谢你的快速帮助@Gideon如果不想定义列,可以使用
UniformGrid
。@Gideon,网格是一个非常有用的布局容器。它完全可以用于两个元素。我已经用更多的flexibale布局更新了这个示例。对于完整的答案,我感到非常荣幸!我使用了
UniformGrid
方法。这看起来很有趣,你能描述一下这里发生了什么吗?当然。资源部分定义了将沿可视化树共享的特定资源。如果您定义了一个样式,那么它将与所有子级共享。它包含一个针对所有FrameworkElement的基本样式。谢谢针对FrameworkElement的样式有一个限制,那就是它们非常通用,所以被“禁止”。但是,它们可以用作更具体样式的基础。这就是我在其他两种风格中所做的。一个以按钮为目标,另一个以文本框为目标。这样,您就可以在不重复和集中的情况下获得所有的利润,这对于灵活性和可维护性非常好:)请随意提问!我爱XAML!
<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>
<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>
<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>