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