2013-05-01 76 views
0

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

如何保持按钮到位?

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

enter image description here enter image description here

+2

有些xaml可能是? – acrilige 2013-05-01 18:59:33

+0

@acrilige对不起,这是我第一次使用WPF。 – 2013-05-01 18:59:52

+1

@FoxyShadoww请勿使用Visual Studio WPF设计器。它会产生蹩脚的XAML并隐藏您的实现细节。熟悉WPF中的不同布局选项('DockPanel','StackPanel','Grid','WrapPanel'等)以及如何使用这些选项来生成所有类型的与分辨率无关的布局。忘记设计师。 – 2013-05-01 19:06:49

回答

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中的Layout Manager。有几个;各有其优点&的缺点。

这是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像素,而你的列表框不是。保持东西排列起来可以改善应用程序的整体外观。

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

+0

我明白了,但是如何将按钮与底部和右侧的10像素对齐,所以它不是码头在角落?我似乎无法得到那个工作 – 2013-05-01 19:26:44

+0

我已经更新了我的答案,以解决您的问题。 – 2013-05-01 19:37:25

1
<Button VerticalAlignment="Bottom" HorizontalAlignment="Right" Margin="5"/> 
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>