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