2013-11-01 43 views
3

我有非常簡單的xaml。WPF - 網格中的擴展器 - 吃空間

<Grid Margin="0,50,0,0"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="30*" /> 
      <ColumnDefinition Width="Auto"/> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*"/> 
      <!--<RowDefinition Height="50"/>--> 
     </Grid.RowDefinitions> 
<Expander Header="" 
      HorizontalAlignment="Left" 
      VerticalAlignment="Stretch" 
      ExpandDirection="Right" 
      IsExpanded="True" 
      Grid.Column="0" 
      Grid.Row="0" 
      Height="Auto" 
      > 
<!-- My List control --> 
</Expander> 
<TabControl Name="ExecutionTab" Grid.Column="1" Grid.Row="0" HorizontalAlignment="Stretch"> 
<!-- soem tabs here --> 
</TabControl> 
</Grid> 

現在在拼接擴展器左邊部分[row = 0,col = 0]被顯示爲空的空間。 我們想要的是正確的部分[row = 0,col = 1]應該佔用整個空間。

在這種情況下應該做什麼? 我已經嘗試了Horizo​​ntalAlignment =「Stretch」選項卡控制但不工作。

我是否需要添加事件處理程序就像在崩潰和更改網格的寬度..但它似乎不是好方法?

任何人都可以提出更好的方法嗎?

謝謝

回答

6

使用網格不是實現您想要的最佳方式。你應該使用DockPanel來代替LastChildFill =「true」。我現在無法嘗試,但我會想像它是這樣的:

<DockPanel LastChildFill="true"> 
<Expander Header="" 
      HorizontalAlignment="Left" 
      VerticalAlignment="Stretch" 
      ExpandDirection="Right" 
      IsExpanded="True" 
      DockPanel.Dock="Left" 
      Height="Auto" 
      > 
<!-- My List control --> 
</Expander> 
<TabControl Name="ExecutionTab" HorizontalAlignment="Stretch"> 
<!-- soem tabs here --> 
</TabControl> 
</DockPanel> 

這應該使標籤控件始終佔據整個剩餘空間。

+1

這是相當有用的CharbelAbdo,謝謝 –

+0

感謝您的意見。嘗試過這一個,但在此更改後,只有Expander正在顯示,並且在摺疊時僅顯示Tabcontrol。所以一次只顯示擴展器或tabcontrol。 – Banng

+0

我只是在本地嘗試,它的工作。無論如何,我們可以看到整個頁面代碼? – Charbel

0

你必須讓你ColumnDefinition.WidthAuto,如果你想固定寬度爲您TabControl你應該給WidthTabControl

<Grid Margin="0,50,0,0"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition Width="Auto"/> 
    </Grid.ColumnDefinitions> 
+0

感謝您的評論。嘗試過這一個,但在此更改後,只有Expander正在顯示,並且在摺疊時僅顯示Tabcontrol。所以一次只顯示擴展器或tabcontrol。 – Banng

2

您可以通過在列定義設置,使這項工作:

<Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition/> 
    </Grid.ColumnDefinitions> 

完整的代碼來顯示這個工作是如下:

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition/> 
    </Grid.ColumnDefinitions> 

    <Expander ExpandDirection="Right" IsExpanded="True"> 
    <TextBlock FontSize="50">Text For Expander</TextBlock> 
    </Expander> 
    <TabControl Name="ExecutionTab" Grid.Column="1"> 
     <TabItem Header="Tab 1"> 
      <TextBox FontSize="50" TextWrapping="Wrap">Text for Tab 1</TextBox> 
     </TabItem> 
     <TabItem Header="Tab 2"> 
      <TextBox FontSize="50" TextWrapping="Wrap">Text for Tab 1</TextBox> 
     </TabItem> 
    </TabControl> 
</Grid> 

如果添加上述的XAML一個窗口,你應該看到以下內容

Window with Expander expanded!

Window with Expander collapsed

+0

使用columndefination auto嘗試了上面的操作,但之後只有Expander被顯示,並且在摺疊時僅顯示Tabcontrol。 – Banng

+0

如果您將上面的代碼放在合理大小的窗口中,您最初將看到擴展器文本和選項卡。選項卡將變窄。當擴展器摺疊時,擴展器文本將消失,該選項卡將佔據整個窗口(除了擴展器按鈕之外)。你是否像上面一樣嘗試xaml? – grantnz

+0

是的,我試過上面的代碼,但面臨類似的問題。 – Banng