2012-04-04 79 views
2

我有一個WPF Grid,其中四列僅包含一個GridSplitter。其中兩列(0和3)是可伸縮的,但一個可伸縮列不直接與GridSplitter相鄰(第2列)。GridSplitter:與GridSplitter不直接相鄰的比例單元

列0和3必須具有相同的初始大小。所以我不能將第0列和第1列放在嵌套網格中。

我該如何解決這個問題?

<Grid Height="40"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*" /> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 
    <Rectangle Grid.Column="0" Fill="Blue" Margin="8" /> 
    <Rectangle Grid.Column="1" Fill="Yellow" Margin="8" Width="24" /> 
    <GridSplitter Grid.Column="2" Width="8" VerticalAlignment="Stretch" /> 
    <Rectangle Grid.Column="3" Fill="Red" Margin="8" /> 
</Grid> 

編輯:nickolay.laptev

<Grid Height="40"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*" /> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 
    <Rectangle Grid.Column="0" Fill="Blue" Margin="8" /> 
    <Rectangle Grid.Column="1" Fill="Yellow" Margin="8 8 16 8" Width="24" /> 
    <GridSplitter Grid.Column="1" Width="8" VerticalAlignment="Stretch" HorizontalAlignment="Right" ResizeBehavior="PreviousAndNext" /> 
    <Rectangle Grid.Column="2" Fill="Red" Margin="8" /> 
</Grid> 

回答

2

我提供了2個選項:

  1. 不要爲GridSplitter使用單個列。而是將其添加到可調整大小的列之間的列(您的案例中的第二列)。您可以使用水平對齊方式將分隔線放置在任何位置。
  2. 處理列手動調整大小。 如果啓用預覽,請使用GridSplitter.DragCompleted事件。在其中更改所需的列寬。 如果預覽被禁用,則使用預覽前綴的另一個事件。

它解決了我的問題。

+0

第1點爲我做了。謝謝。看到我編輯的問題。 – Heiner 2014-03-27 09:13:48

0

東西的幫助,這樣

 <ColumnDefinition Width="{Binding ElementName=sizedColumn.ActualWidth}" /> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition Width="*" x:Name="sizedColumn"/> 

解決,但你需要添加多轉換器,並且還通過窗口的大小和第1列的大小。