C# 在StackPanel中对齐元素

C# 在StackPanel中对齐元素,c#,wpf,xaml,stackpanel,C#,Wpf,Xaml,Stackpanel,我有一个堆栈面板,它有一个几何按钮、文本块和两个平面按钮。。尽管我给了这些元素单独的水平排列,但它们似乎都是从我的左手边堆积起来的 我希望几何体按钮和文本块朝向堆栈面板的左侧对齐,平面按钮朝向堆栈面板的右侧对齐 到目前为止,他们都是从左手边按各自的顺序排列的 为什么XAML没有找到我的路线?我能做些什么吗 谢谢你的帮助 这是我的密码 <StackPanel Grid.Row="2" Orientation="Horizontal" Margin="0,10,0,0">

我有一个堆栈面板,它有一个几何按钮、文本块和两个平面按钮。。尽管我给了这些元素单独的水平排列,但它们似乎都是从我的左手边堆积起来的

我希望几何体按钮和文本块朝向堆栈面板的左侧对齐,平面按钮朝向堆栈面板的右侧对齐

到目前为止,他们都是从左手边按各自的顺序排列的

为什么XAML没有找到我的路线?我能做些什么吗

谢谢你的帮助

这是我的密码

<StackPanel Grid.Row="2" Orientation="Horizontal" Margin="0,10,0,0">
                <GeometryButton    Command="{}" 
                                   Geometry="{StaticResource {}"
                                   ToolTip="{}"
                                   HorizontalAlignment="Left"/>

                <TextBlock 
                              Text="{}" 
                              Style="{}"
                              Margin="0,10,10,10"
                              Foreground="Black"
                              HorizontalAlignment="Left"/>


                <FlatButton Command="{}"
                               Content="{}" 
                               Style="{}"
                               VerticalAlignment="Center" 
                               HorizontalContentAlignment="Center"
                               IsDefault="True"
                               Margin="0"
                               MinWidth="80"
                               HorizontalAlignment="Right"
                               />

                <FlatButton Command="{}"
                               Content="{}" 
                               Style="{}"
                               VerticalAlignment="Center"
                               HorizontalContentAlignment="Center"
                               MinWidth="80"
                               Margin="10,0,0,0"
                               HorizontalAlignment="Right"
                               />
            </StackPanel>

可以使用列定义代替
StackPanel
。例如:


输出:

已编辑

另一个解决方案:


如果您的预期输出如下所示:

 --------------------------------------
| [Geo Button]                         |
| [Text Block]                         |
|                         [Flat Button]|
|                         [Flat Button]|
 --------------------------------------
然后您需要将
方向
更改为
垂直
,而不是
水平

但是,如果您需要:

 --------------------------------------
| [Geo Button]            [Flat Button]|
| [Text Block]            [Flat Button]|
 --------------------------------------
它是:

  • 更改
    平面按钮的
    边距
    ,同时仍使用上述代码(我个人不建议这样做);或
  • 使用
    Grid
    DockPanel
    ,尝试查找代码和更多解释
  • 我通过以下内容部分实现了您的预期输出:

    <Grid Height="100" Background="Red">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <StackPanel Orientation="Horizontal" Grid.Column="0">
            //...
        </StackPanel>
        <StackPanel Orientation="Horizontal" Grid.Column="1" HorizontalAlignment="Right">
            //...
        </StackPanel>
    </Grid>
    
    
    //...
    //...
    

    部分,因为我没有
    平面按钮
    地理按钮
    的资源,所以我只使用了常规的
    按钮
    。请注意,您需要将
    垂直对齐
    属性设置为
    中心

    属性
    应适用于此。试试这个:

    <DockPanel Margin="0,10,0,0">
        <Button  HorizontalAlignment="Left" Content="GeoButton" Height="20" DockPanel.Dock="Left"/>
        <TextBlock Foreground="Black" VerticalAlignment="Center" Text="TextBlock" DockPanel.Dock="Left"/>
        <Button  HorizontalAlignment="Right" Content="Flat Button1" Height="20" DockPanel.Dock="Right"/>
        <Button  HorizontalAlignment="Right" Content="Flat Button2" Height="20" DockPanel.Dock="Right"/>
    </DockPanel>
    
    
    

    您的预期输出是否为扁平按钮与两端的几何按钮和文本块对齐?水平对齐的StackPanel-将设置一行中的所有项目(如果窗口宽度允许)。每元素水平对齐将对齐该项目(在其图形边界内向左或向右)。我想你可能会混淆StackPanel和DockPanel。我的预期结果是几何按钮和文本块在左侧对齐,而两个平面按钮在右侧对齐@CodeRedUsing Grid对我来说不是一个选项,因为我已经阅读了一些网格。这个必需的堆栈面板实际上位于网格内(Grid.Row=“2”)为什么不能使用
    Grid
    控件?我认为
    网格
    是解决您问题的最佳且简单的解决方案。您使用docpanel的第二个解决方案非常完美,因此我将正确标记。出于好奇,我如何使用网格控制解决此问题?我也无法理解为什么docpanel是解决此问题的好方法,而堆栈面板不起作用。。。。。如果您能向我解释一下,我将不胜感激。请查看编辑后的问题@CodeRed
    <DockPanel Margin="0,10,0,0">
        <Button  HorizontalAlignment="Left" Content="GeoButton" Height="20" DockPanel.Dock="Left"/>
        <TextBlock Foreground="Black" VerticalAlignment="Center" Text="TextBlock" DockPanel.Dock="Left"/>
        <Button  HorizontalAlignment="Right" Content="Flat Button1" Height="20" DockPanel.Dock="Right"/>
        <Button  HorizontalAlignment="Right" Content="Flat Button2" Height="20" DockPanel.Dock="Right"/>
    </DockPanel>