2014-03-05 74 views
2

需要幫助使用xaml佈局。在WrapPanel內部自動調整大小?

我有一個內部有兩個元素的Wrapanel。 MainGrid的左邊一個需要固定在900像素。第二個是AuxillaryDataScrollViewer,如果WrapPanel包裝它,我希望最小爲650,最大爲100%。這可能嗎?

這是我走到這一步:

<Window x:Class="scratch.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="768" Width="1024"> 
    <Grid> 
     <ScrollViewer> 
      <WrapPanel> 
       <Grid Width="900" Height="800" Background="Bisque"></Grid> 
       <ScrollViewer HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Hidden" Width="650"> 
        <Grid Width="1500" Height="700" Background="Tomato"></Grid> 
       </ScrollViewer> 
      </WrapPanel> 
     </ScrollViewer> 
    </Grid> 
</Window> 

謝謝!

編輯加入了更多的細節:

客戶希望做數據錄入,看到在面板右側的計算結果實時,但一些在他的實驗室的電腦只能夠1280pixels對那些寬度,他希望將結果包裝到數據輸入表單下方。

+0

你想要兩個元素並排嗎? – voddy

+0

如果顯示器有分辨率,如果不是我想要它包裝。 – safetyOtter

+0

我測試了你的代碼,它可以像你期望的那樣工作。 – voddy

回答

3

由於要求如此明確,您可以簡單地添加一個SizeChanged處理程序,並根據容器的寬度手動設置第二個元素的寬度。如果容器小於900 + 650,則將第二個元件拉伸至容器的100%。

public MainWindow() 
{ 
    SizeChanged += MainWindow_SizeChanged; 
} 

void MainWindow_SizeChanged(object sender, SizeChangedEventArgs e) 
{ 
    double firstElementWidth = MainGrid.Width;       // 900 
    double secondElementMinWidth = AuxillaryDataScrollViewer.MinWidth; // 650 

    double secondElementWidth; 

    // if wrapped, stretch to the container 
    if (e.NewSize.Width < firstElementWidth + secondElementMinWidth) 
     secondElementWidth = e.NewSize.Width; 
    // otherwise (not wrapped), fill the remainder of the first row 
    else 
     secondElementWidth = e.NewSize.Width - firstElementWidth; 
} 

很明顯,這是快速和骯髒的。如果你需要更強大的東西,那麼我建議你寫一個custom panel,它符合你需要的約定。 WrapPanel無法將元素拉伸到整體寬度,但沒有理由不能設計出可以做到的面板。

+0

我想到了這一點,但不希望在代碼審查期間因缺少更簡單/更少的kludgey解決方案而被人嘲笑。謝謝! – safetyOtter