2011-09-15 49 views
1

我正在開發一個Silverlight Web應用程序,現在正在以三列分隔的子窗口上工作。左邊是用於不會始終顯示的消息,而兩個(中間和右邊)將始終顯示。Silverlight Grid調整大小問題

我的問題是:如果左列不需要顯示任何數據,我怎麼能讓右列和中列使用所有空間?因此,例如,如果我的子窗口的寬度爲100,則每個窗口的寬度應爲33.333,或者如果左邊的窗口不需要顯示,則其他兩個都是50.是否有任何方法不會在代碼後面搞亂?

編輯:子窗口看起來像這樣

<controls:ChildWindow ... 
    <Grid x:Name="LayoutRoot" Margin="2"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*" /> 
      <ColumnDefinition Width="*" /> 
      <ColumnDefinition Width="*" /> 
     </Grid.ColumnDefinitions> 
     <Grid Name="msgGrid" Grid.Column = 0/> 
     <Grid Grid.Column = 1/> 
     <Grid Grid.Column = 2/> 
</controls:ChildWindow> 

我傳遞一個布爾值(showMessageToUser)到子窗口的構造函數,並根據它應該被確定做什麼

+0

沒有任何代碼,第一列如何確定它不需要顯示任何數據? – AnthonyWJones

+0

@HiTechMagic只是做了一個複製過去,並忘記改變它......也感謝這一點:) –

+1

作爲一個標準,請確保您避免在XAML中的「=」周圍的空格。我已經更新了匹配的答案。 –

回答

1

製作第一列「自動」大小和第二個兩列1 *(或只是*)的寬度。

第一列將摺疊到其內容(大概你會顯示/隱藏),第二列將佔用50%,因爲*尺寸只是一個比例。

在第一列中放置一個名稱容器(另一個網格?)並控制其可見標誌。其他2列將自己照顧。

<controls:ChildWindow ... 
    <Grid x:Name="LayoutRoot" Margin="2"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto" /> 
      <ColumnDefinition Width="*" /> 
      <ColumnDefinition Width="*" /> 
     </Grid.ColumnDefinitions> 
     <Grid x:Name="msgGrid1" Grid.Column=0 Width="100"/> 
     <Grid Grid.Column=1/> 
     <Grid Grid.Column=2/> 
</controls:ChildWindow> 

控制msGrid1的可見性以獲得您想要的效果。如果您還希望用戶控制列0的寬度(例如,使用GridSplitter),您將需要隱藏代碼,因爲這兩個功能不能一起工作。

+0

有趣的事情......我做了一個自動和休息*,它沒有奏效。現在它神奇地工作:)謝謝你。 –

+0

不客氣。知道什麼應該起作用可以讓事情變得更加簡單(因此找到真正的原因)。:) –

+0

+1爲實用的解決方案(我正在尋找實際概述的文字解決方案)。 – AnthonyWJones