0

注意:这是我第一次使用 WPF。
我正在尝试对齐某个控件,我们现在说一个按钮,在右下角。但是当我调试我的应用程序时,它在底部和右侧错过了 8 个像素。我会附上两张图片来告诉你会发生什么。

如何将按钮保持在原位?

我的 XAML 代码:

<Window x:Class="Plugin_Manager.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Plugin Manager" Height="350" Width="525" Loaded="Window_Loaded_1">
<Grid x:Name="GridMain">
    <Button Content="Refresh" Margin="432,288,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" Width="75"/>
    <ListView HorizontalAlignment="Left" Height="273" Margin="10,10,0,0" VerticalAlignment="Top" Width="497">
        <ListView.View>
            <GridView>
                <GridViewColumn/>
            </GridView>
        </ListView.View>
    </ListView>

</Grid>

在此处输入图像描述 在此处输入图像描述

4

3 回答 3

7

如果您选择使用Grid布局,则应尽量避免通过Margin. Margin应该用于在对象周围创建缓冲区,而不是将其移动到窗口中的特定点。充分利用布局管理器的力量!

这是一个Grid可以满足您要求的示例。

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>

    <ListView Grid.Row="0" />

    <Button Grid.Row="1"  HorizontalAlignment="Right" Content="Push Me" />

</Grid>

我还会阅读WPF 中的布局管理器。有几个; 每个都有自己的优点和缺点。

这是一个DockPanel版本。

<DockPanel>
    <Button DockPanel.Dock="Bottom"  HorizontalAlignment="Right" Content="Push Me" />
    <ListView />
</DockPanel>

要在按钮和窗口镶边之间创建缓冲区,您可以做一些不同的事情:

  1. <Grid Margin="10">将在所有内容和所有侧面的窗口镶边之间应用 10 像素空间。
  2. <Grid Margin="0,0,10,10">将缩进所有内容,但仅在右侧和底部。
  3. <Grid Margin="10,0,10,10">四周缩进,除了顶部(我通常这样做,具有不同的边距值)。
  4. <Button Margin="0,0,10,10">只会缩进 chrome 中的按钮(这是对您的评论问题的直接回答)。

    • Grid上面的内容替换DockPanel为第二个示例,或者您正在使用的任何其他布局管理器。

可用性方面的说明:您的确认按钮(我假设您的按钮将是确定/取消类型的按钮)的缩进不应与您的其他内容不同。所有与右边距对接的控件都应该在同一点这样做(即,您可以在它们的右侧画一条垂直线)。

因此,使用您的问题示例:您的按钮不应向右缩进 10 像素,而您的列表框则不是。让事情保持一致将改善您的应用程序的整体外观。

(这结束了我的“可用性和外观很重要”旁注):)

于 2013-05-01T19:09:09.400 回答
1
<Button VerticalAlignment="Bottom" HorizontalAlignment="Right" Margin="5"/>
于 2013-05-01T19:01:10.467 回答
0

一些代码示例会有所帮助。尝试在 xaml 中为您的按钮使用对齐方式,如下所示。确保按钮上的边距为 0。

<Button Margin="0" HorizontalAlignment="Right" VerticalAlignment="Bottom"/>

查看示例代码,可能是您的边距和对齐方式导致了这种情况。

只是一些可能会有所帮助的指针。我发现使用网格上的列和行定义更容易,而不是使用大的边距来对齐控件。这样,您可以使用网格对齐控件,并且它们会在您调整窗口大小时正确调整大小。我附上了一个示例,希望它对您使用 WPF 的新冒险有所帮助!

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="150"/>
        <ColumnDefinition Width="150"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <TextBlock Grid.Column="0" Grid.Row="0" Text="Version Date" Margin="3" VerticalAlignment="Center"/>
    <TextBlock Grid.Column="0" Grid.Row="1" Text="{Binding DateSubmitted}" Margin="3"/>
    <TextBlock Grid.Column="1" Grid.Row="0" Text="Report" Margin="3" VerticalAlignment="Center"/>
    <TextBlock Grid.Column="1" Grid.Row="1" Text="{Binding ReportName}" Margin="3"/>
</Grid>
于 2013-05-01T19:03:28.363 回答