2013-05-01 80 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>