2013-03-19 82 views
0

我想有一個WPF面板有兩列,其中第二個是固定寬度,並在第一列的右側。第一列是自動調整大小的。我希望第二列始終在第一列之後,而且當窗口(或父元素)變得太窄並且只有第一列或第一列的一部分適合時,也不會迷路。WPF網格佈局以及如何處理太窄窗口

當我使用DockPanel中是這樣的:

<DockPanel DockPanel.Dock="Top"> 
    <Label Content="I am autosize" DockPanel.Dock="Left" /> 
    <Label Content="I come right after the first column" /> 
</DockPanel> 

第一欄是可見的,第二個是後馬上當我開始調整窗口的大小,使其更窄,首先,第二列變裁剪,直到消失,第一個裁剪。

當我使用這個:

<DockPanel DockPanel.Dock="Top"> 
    <Label Content="I come right after the first column" DockPanel.Dock="Right" /> 
    <Label Content="I am autosize" /> 
</DockPanel> 

第二欄開始進行第二裁剪,但是當窗口足夠寬,它不是後立即填充停靠第一個,它停靠在右側。第一列不是自動調整大小的。

當我嘗試使用網格時,結果基本相同。當我將列寬設置爲*,20,*時,它不起作用,*,20,Auto也不會使其行爲與我想要的完全一樣。

甚至可以使用某些面板(DockPanel,優先)和佈局屬性組合,使我的第二列始終顯示在第一個列的右側,但也會在第一個列的寬度結合起來大於父元素寬度,所以在這種情況下,第二列似乎是正確停靠的,而第一列是完全停靠的?

謝謝!

回答

0

您可以嘗試使用網格控件。

<Window x:Class="WpfApplication6.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525" 
    MinWidth="200"> 
<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*"/> 
     <ColumnDefinition MinWidth="200"/> 
    </Grid.ColumnDefinitions> 
    <TextBlock Text="I am autosize" 
        Background="Red" /> 
    <TextBlock Text="I come right after the first column" 
        Grid.Column="1" 
        Background="AliceBlue" 
        Width="200" 
        HorizontalAlignment="Left" /> 
</Grid> 

唯一的問題是,你必須要還父控件MinWidth設置爲一個固定的大小,在這個例子的情況下,該窗口。 我希望這可以幫助你。

+0

不幸的是,這並沒有完全解決我的問題。我希望我的第一個元素最初儘可能少地佔用空間,但能夠擴展。例如,像WrapPanel中的TextBox一樣,它很小,但是當你輸入它時,它會延伸。除非沒有足夠的空間,另一個控件應該緊挨着它,在這種情況下,第二個控件應該保持完全可見並且第一個控件應該部分裁剪。在你的例子中,第一個TextBlock擴展到Grid中的剩餘寬度,它不會水平保持儘可能小。另外,第二個元素應該是固定的寬度。謝謝,認爲:) – user2171565 2013-03-19 16:33:07

+0

所以基本上你不希望網格拉伸。設置網格的水平對齊,看看是否有效 – failedprogramming 2013-03-19 21:13:14