2010-01-15 165 views
1

我正在處理其內容是網格的WPF控件。我對WPF比較陌生,所以我想知道下面是否是正確的方法。WPF網格佈局和單元格內容邊距

我放置兩個標籤中的網格,都在同一列中,但相鄰行:

<Window 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
x:Class="UntitledProject8.Window1" 
x:Name="Window" 
Title="Window1" 
Width="200" Height="200"> 

<Grid x:Name="LayoutRoot"> 
    <Grid HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" Height="100"/> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <Label Grid.Row="0" Content="1.23" FontSize="18" HorizontalAlignment="Center" VerticalAlignment="Bottom"/> 
    <Label Grid.Row="1" Content="45" FontSize="48" HorizontalAlignment="Center" VerticalAlignment="Top"/> 
</Grid> 

我設置標籤垂直對準,使得在零行標籤被對準到底部,第1排的標籤與頂部對齊。

現在,這與我想要的很接近,但我需要第1行中標籤的實際文本更接近第零行中的標籤文本。要做到這一點,我在第1行標籤的邊距設置爲負值:

<Window 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
x:Class="UntitledProject8.Window1" 
x:Name="Window" 
Title="Window1" 
Width="200" Height="200"> 

<Grid x:Name="LayoutRoot"> 
    <Grid HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" Height="100"/> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <Label Grid.Row="0" Content="1.23" FontSize="18" HorizontalAlignment="Center" VerticalAlignment="Bottom"/> 
    <Label Grid.Row="1" Content="45" FontSize="48" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,-20,0,0"/> 
</Grid> 

那是正確的方式做到這一點?當然,我上面的例子是簡單的,但隨着網格內容的增長和變得更加複雜(例如包括其他佈局容器),爲控制邊界設置不同的值是使相鄰單元格更接近或更遠的正確方法?

我只是有點擔心,因爲我盡我所能避免硬編碼任何類型的「設計器」值,就像我在使用WinForms時(例如爲位置和尺寸值設置確切的座標系)一樣,並且希望讓佈局經理來照顧它。但是,看起來設定保證金是唯一的出路。

感謝您的幫助:)

回答

1

這看起來不錯!唯一讓我感到不安的是20英尺的頂部邊距(而不是底部20英寸應該做同樣的事情),但我只會爲了清晰起見而改變這一點。

要注意的主要問題是容器的選擇,哪些網格肯定會爲你工作。這樣做的另一個特點是,當你拉伸網格時,你的元素之間的距離將成比例地增長(可能是你想要的)。網格的唯一弱點是它不是最高效的。主要是因爲你可以用它做很多事情。

您可以使用畫布(使用拉伸功能)完成與上述相同的操作,或者如果您不希望距離拉伸,則可以嘗試一個堆疊面板,該面板也將比網格更有效。還有一些其他面板,但熟悉它們可以做什麼(以及它們的表現如何)非常有用,特別是在需要創建更復雜的佈局時。

至於保證金,是的,隨着設置寬度和高度,是設置間距的標準方法。