2011-02-07 95 views
1

我正在構建一個WPF應用程序,並在其上有很多控件。我面臨的要求是控制當用戶調整窗口大小時(寬度方向)首先摺疊/展開的內容。 我試圖找出是否有某種方式我應該佈局我的控件,以獲得「免費」的功能 - 意味着不必鉤入WM_SIZE和WM_GETMINMAXINFO消息並手動處理這個 - 痛苦的。在調整WPF窗口大小時,如何控制首先摺疊的內容

這裏有一個簡單的例子:

<Window x:Class="DeleteMe.Window8" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Title="Window8" Height="150" Width="800"> 
<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="220" /> 
     <ColumnDefinition Width="Auto"/> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 

    <StackPanel Orientation="Horizontal" Margin="5,0" HorizontalAlignment="Center" Grid.Column="0" > 
     <Button Width="50" Height="50" Content="Btn1"/> 
     <Button Width="50" Height="50" Content="Btn2"/> 
     <Button Width="50" Height="50" Content="Btn3"/> 
     <Button Width="50" Height="50" Content="Btn4"/> 
    </StackPanel> 

    <StackPanel Orientation="Horizontal" Grid.Column="1"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto"/> 
       <ColumnDefinition Width="*"/> 
      </Grid.ColumnDefinitions> 
     </Grid> 
     <Rectangle HorizontalAlignment="Left" Width="1" Height="Auto" Fill="Gray"/> 
     <Border Grid.Column="0" Margin="5" BorderThickness="1" HorizontalAlignment="Center" Background="Transparent" Height="100" Width="100"> 
      <Image Source="/heart_on.png"/> 
     </Border> 
     <Grid Grid.Column="1"> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="Auto"/> 
       <RowDefinition Height="*"/> 
       <RowDefinition Height="Auto"/> 
      </Grid.RowDefinitions> 
      <TextBlock Grid.Row="0" Margin="10,10,0,0" Text="TEXT1"/> 
      <StackPanel Grid.Row="1" Margin="10,5,0,0" Orientation="Vertical" HorizontalAlignment="Left"> 
       <TextBlock HorizontalAlignment="Left" Text="TEXT2"/> 
       <StackPanel HorizontalAlignment="Left" Orientation="Vertical" > 
        <StackPanel Orientation="Horizontal" Margin="0,2"> 
         <TextBlock HorizontalAlignment="Left" Text="TEXT3:" /> 
         <TextBlock Margin="2,0" HorizontalAlignment="Left" Text="TEXT4"/> 
        </StackPanel> 
        <StackPanel Orientation="Horizontal"> 
         <TextBlock HorizontalAlignment="Left" Text="TEXT5:" /> 
         <TextBlock Margin="2,0" HorizontalAlignment="Left" Text="TEXT6"/> 
        </StackPanel> 
       </StackPanel> 
      </StackPanel> 
      <Grid Grid.Row="2" > 
       <StackPanel Orientation="Horizontal" > 
        <Grid Margin="7" Width="270" Height="20" VerticalAlignment="Top"> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="Auto" /> 
          <ColumnDefinition Width="*" /> 
          <ColumnDefinition Width="Auto" /> 
         </Grid.ColumnDefinitions> 

         <TextBlock VerticalAlignment="Center" Grid.Column="0" Margin="5,0" Text="0" /> 
         <Slider Grid.Column="1" VerticalAlignment="Center" Width="Auto" Margin="5,0,5,0" Value="0" Minimum="0"/> 
         <TextBlock VerticalAlignment="Center" Grid.Column="2" Margin="5,0" Text="1" /> 
        </Grid> 
       </StackPanel> 
      </Grid>      
     </Grid> 
    </StackPanel> 

    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Grid.Column="2" Width="Auto"> 
     <TextBlock VerticalAlignment="Center"> 
       Some other controls in here ... 
      </TextBlock> 
    </StackPanel> 

</Grid> 

更具體地說,我需要像第一折疊縮小窗口時,那麼「在這裏的一些其他控件......」部分和整個TEXT的部分應該同樣崩潰。 左側應該始終可見,但我已經通過設置整個窗口的MinWidth來做到這一點。

謝謝。

回答

-1

聽起來好像你需要一個WrapPanel,這個面板像StackPanel一樣堆疊,但是如果沒有足夠的空間,它會環繞到一個或多個新行。

+0

我試圖找到一種方法來控制什麼得到摺疊(即隱藏)。所以在上面的例子中,你開始縮小窗口,摺疊的第一件事是圖像。 WrapPanel不會隱藏圖像,它會嘗試爲它創建一個新的行或列,就像你提到的那樣。 – user350213 2011-02-08 17:35:16

相關問題