2014-11-06 74 views
1

我甚至無法理解這一點。我在.net 4.5.1中有一個網格劃分器。我創建了一個新的wpf應用程序,然後將下面的代碼放在主窗口中。 我對的期望是什麼:在一個有兩列的網格中,當我拖動分離器到右邊時,右邊的列應該減小,而左邊的列應該增加。當我拖動分離器到左邊時,左邊的列應該縮小大小,而右邊的列應該大小。 我看到的行爲:當我將分隔線向右拖動時,右側的列的大小減小,左側的列的大小減小。所以這兩個文本框的寬度變小了。當我將分離器拖動到左側時,分離器停在網格的中心,沒有其他事情發生。我沒有最小寬度或寬度。有沒有人有這方面的線索?.Net 4.5.1 GridSplitter只會減少列數

<Grid> 

    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*" SharedSizeGroup="A" /> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition Width="*" SharedSizeGroup="A" /> 
    </Grid.ColumnDefinitions> 


    <TextBox Grid.Column="0" FontSize="55" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" TextWrapping="Wrap" Text="Hi" /> 
    <GridSplitter Grid.Column="1" Width="5" Background="Transparent" ResizeDirection="Columns" VerticalAlignment="Stretch" /> 

    <TextBox Grid.Column="2" FontSize="55" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" TextWrapping="Wrap" Text="there" /> 

</Grid> 
+0

這裏你想要的確切行爲是什麼?一個'GridSplitter'可以調整(縮小和增長)*** 2列***在同一時間。在你的代碼中,它調整當前列和第三列(下一列)的大小。然而,第一列的'Width'與第三列相同(都等於'*')。當你將網格向左拖動直到當前列的寬度變爲'0'時,它當然會停在那裏,左右列同樣是整個網格寬度的50%。 – 2014-11-06 03:52:34

+0

我編輯了這個問題,以更好地解釋發生了什麼。 – dgxhubbard 2014-11-06 16:40:18

+0

我已經添加了這個問題的答案。解決這個問題相當容易。 – 2014-11-06 16:55:31

回答

1

現在,我明白你想要什麼。您正在遵循一種方法,您甚至可以爲GridSplitter保留一列(中間一列)。採用這種做法,你需要指定ResizeBehaviorPreviousAndNext設置伸縮動作來調整先前和下一列讓電流(中間)列不變:

<GridSplitter Grid.Column="1" Width="5" Background="Transparent" 
       ResizeDirection="Columns" VerticalAlignment="Stretch" 
       ResizeBehavior="PreviousAndNext"/> 

你也不必當它的Width足夠小並且對包含列的Width沒有太大影響時,請爲GridSplitter指定一個單獨的列。這意味着你只需要2列,將GridSplitter放在第一列或第二列中並不重要。但請注意,將其放入第二列時,HorizontalAlignment應爲Left。當把它放在第一列時,HorizontalAlignment應該是Right(這是默認值)。以下代碼將GridSplitter放在第二列中。我們把它放在所有文本框之後,以確保它在文本框的頂部被渲染,否則你必須明確且適當地設置Panel.ZIndex

<Grid.ColumnDefinitions> 
    <ColumnDefinition Width="*" SharedSizeGroup="A" /> 
    <ColumnDefinition Width="*" SharedSizeGroup="A" /> 
</Grid.ColumnDefinitions> 


<TextBox Grid.Column="0" FontSize="55" HorizontalAlignment="Stretch" 
     VerticalAlignment="Stretch" TextWrapping="Wrap" Text="Hi" /> 
<TextBox Grid.Column="1" FontSize="55" HorizontalAlignment="Stretch" 
     VerticalAlignment="Stretch" TextWrapping="Wrap" Text="there"/> 
<GridSplitter Grid.Column="1" Width="5" Background="Transparent"  
       ResizeDirection="Columns" VerticalAlignment="Stretch" 
       HorizontalAlignment="Left"/> 
+1

謝謝大家的工作。 – dgxhubbard 2014-11-06 17:21:04