2017-06-19 68 views
1

我無法讓我的xaml以我想要的方式工作。帶有數據網格和擴展器的wpf佈局

我想要的是這個。 我的ItemsControl應該有70的高度。剩下的空間應該填充一個DockPanel。 在DockPanel裏面我有一個GridControl(DevExpress的DataGrid),它應該填充所有的空白空間。網格控件停靠在頂部。在網格控制下面,但仍然插入了DockPanel,我有一個最大高度爲480的擴展器,這應該停靠在底部。

我現在的問題是,我無法讓gridcontrol動態地改變它的高度,以便它填充停靠面板頂部到擴展器之間的所有剩餘空間。

我在做什麼錯了?

<Grid Background="White"> 
<Grid.RowDefinitions> 
    <RowDefinition Height="70" /> 
    <RowDefinition Height="*" /> 
</Grid.RowDefinitions> 
<Grid.ColumnDefinitions> 
</Grid.ColumnDefinitions> 

<!--#region ItemControl--> 
<ItemsControl 
    Grid.Row="0" 
    Grid.ColumnSpan="9" 
    HorizontalAlignment="Stretch" 
    IsTabStop="False" 
    ItemsSource="{Binding Path=ToolbarControlViewModel.CommandButtonList}" 
    Style="{DynamicResource ActionBarPanel}"> 
    <ItemsControl.ItemsPanel> 
     ... 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      ... 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 
<!--#endregion--> 

<DockPanel Grid.Row="1"> 

    <!--#region Listview--> 
    <dxg:GridControl 
     x:Name="CMGrid" 
     DockPanel.Dock="Top" 
     Margin="0,0,0,10" 
     ItemsSource="{Binding Path=CustomerManagementListViewModel.Customers}" 
     ScrollViewer.VerticalScrollBarVisibility="Visible"> 
     <dxg:GridControl.Columns> 
      ... 
     </dxg:GridControl.Columns> 
     <dxg:GridControl.View> 
      <dxg:TableView 
       x:Name="CustomerListView" 
       AllowBestFit="True" 
       FocusedRow="{Binding Path=CustomerManagementListViewModel.SelectedCustomer, Mode=TwoWay}" 
       IsColumnMenuEnabled="False" 
       NavigationStyle="Row" 
       ShowGroupPanel="False" 
       AutoWidth="True"/> 
     </dxg:GridControl.View> 
    </dxg:GridControl> 
    <!--#endregion--> 

    <!--#region Controls--> 
    <Expander 
     MaxHeight="480" 
     VerticalContentAlignment="Stretch" 
     DockPanel.Dock="Bottom" 
     Header="{T:Translate Equipment, 
          Format=' {0}:'}" 
     IsExpanded="True" 
     Style="{StaticResource K2M_Epander_Base}" VerticalAlignment="Bottom"> 
     <Expander.Content> 
      <Grid> 
       ... 
      </Grid> 
     </Expander.Content> 
    </Expander> 
    <!--#endregion--> 
</DockPanel> 

+2

將'DockPanel'全部放在一起並將您的Row = 1應用於GridControl。這是你的罪魁禍首。 –

+0

太簡單了!它的工作原理,非常感謝! :)如果你把它寫成答案,我會相信你。 – merger

回答

1

我覺得對於這樣一個匆匆越來越不好分,但如果這個問題是怎麼回事留我想我們不妨給一些封閉的未來發現者。

因此,DockPanel有其用途,但在這種情況下,它是你的罪魁禍首。由於DockPanel嵌套在佈局中,因此基本上相當於將VerticalAlignment="Top"屬性附加到GridControl。這解釋爲僅從父行的頂部向下消耗必需的空間。

通過(在這種情況下它是多餘的,因爲)去除DockPanel完全和應用的行聲明直接把它作爲一個正常的孩子到父Grid容器的能力,並且會消耗由該行的所提供的空間GridControl*聲明。

很高興你把它整理好,喜歡快速的'簡單的。歡呼聲:)