2009-06-11 4 views
11

У меня есть StackPanel, содержащий StackPanel и некоторые другие предметы. Первый StackPanel имеет вертикальную ориентацию, внутренняя имеет горизонтальную ориентацию. Внутренняя имеет TreeView и ListView, я бы хотел, чтобы они расширялись и соответствовали ширине окна, которое я установил в окне, и разрешаю пользователю изменять. Я также хотел бы, чтобы внешний StackPanel соответствовал высоте окна. Как мне это сделать?Как сделать элементы в DockPanel расширяться, чтобы соответствовать всем доступным пространствам в WPF?

Edit: Я превращали в использовании DockPanel, и я установить DockPanel.Dock свойства правильно в каждом из элементов, и есть в обоих dockpanels инвалидов LastChildFill, макет еще не растягиваться.

Кодекс:

<Window x:Class="Clippy.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="400" Width="600" MinHeight="400" MinWidth="600" Loaded="Window_Loaded" SizeChanged="Window_SizeChanged"> 
    <DockPanel Name="wrapperDockPanel" LastChildFill="False"> 
     <Menu Height="22" Name="mainMenu" Width="Auto" DockPanel.Dock="Top" /> 
     <ToolBar Height="26" Name="mainToolBar" Width="Auto" DockPanel.Dock="Top" /> 
     <DockPanel Height="Auto" Name="contentDockPanel" DockPanel.Dock="Top" LastChildFill="False"> 
      <TreeView Name="categoryTreeView" /> 
      <ListView Name="clipListView" /> 
     </DockPanel> 
     <StatusBar Height="23" Name="mainStatusBar" DockPanel.Dock="Top" /> 
    </DockPanel> 
</Window> 
+0

Можем ли мы увидеть код? – Brad

+1

Почему вы устанавливаете LastChildFill = "False"? Значение по умолчанию True приведет к тому, что ListView заполнит пробел. –

+0

Согласовано с Хенком тоже ... –

ответ

7

Это должно быть сделано - я настроил его так, чтобы TreeView и ListView разделили основной вид 50/50; если вы этого не хотите, установите его в «Авто» и «*» или что-то еще. Используйте «LastChildFill» в ваших интересах!

<Window x:Class="Clippy.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="400" Width="600" MinHeight="400" MinWidth="600" Loaded="Window_Loaded" SizeChanged="Window_SizeChanged"> 

    <DockPanel LastChildFill="True"> 
     <Menu Width="Auto" DockPanel.Dock="Top" /> 
     <ToolBar Width="Auto" DockPanel.Dock="Top" /> 
     <StatusBar DockPanel.Dock="Bottom" /> 

     <Grid> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="0.5*" /> 
       <RowDefinition Height="0.5*" /> 
      </Grid.RowDefinitions> 

      <TreeView Name="categoryTreeView" Grid.Row="0" /> 
      <ListView Name="clipListView" Grid.Row="1" /> 
     </Grid> 
    </DockPanel> 

</Window> 
0

ширина Установить и свойства высоты на "авто"

11

Используйте DockPanel вместо этого. StackPanel явно не заботится о видимом пространстве, тогда как DockPanel выполняет все вычисления размера на основе доступного пространства.

Update:

Кроме того, в моем опыте, положив тело окна в вид, и только имея представление в окне делает для лучшего опыта Auto Size.

По какой-то причине помещение всех детей прямо в окно, по-видимому, не очень велико.

Update 2:

Я хотел бы удалить явный атрибут DockPanel.Dock от элемента, который вы хотите растянуть (заполнить) неиспользуемое пространство.

+0

Да, DockPanel работает красиво. Работает и в Silverlight. –