2009-06-11 20 views
11

StackPanel ve diğer bazı öğeler içeren StackPanel ürünüm var. İlk StackPanel dikey yönelime sahiptir, iç kısım yatay yönelime sahiptir. İçinde bir TreeView ve bir ListView vardır, pencerenin genişliğini genişletmek ve sığdırmak istedim, pencerenin ayarladığı ve kullanıcının değiştirmesine izin verdim. Dış StackPanel penceresinin yüksekliğini de sığdırmak isterim. Bunu nasıl yaparım?Bir DockPanel öğesindeki öğeler WPF'deki tüm kullanılabilir alana sığdırmak için nasıl genişletilir?

Düzenleme: Ben DockPanel kullanarak dönüştürülür ettik ve öğelerin her biri doğru DockPanel.Dock özellikleri ayarlamak ettik ve dockpanels her ikisinde de özürlü LastChildFill var, düzen hala esnemez.

Kodu:

<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

Kodu görebilir miyiz? – Brad

+1

Neden LastChildFill = "False" ayarını yapıyorsunuz? True değerinin varsayılan değeri, ListView'in alanı doldurmasını sağlar. –

+0

Henk ile anlaşmışsınız ... –

cevap

7

Bunu yapmalıyım - TreeView ve ListView ana görünümü 50/50 paylaşacak şekilde ayarladım; Bunu istemiyorsan, onu 'Otomatik' ve '*' ya da bir şey olarak ayarla. Avantajınıza "LastChildFill" kullanın!

<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

Seti genişlik ve yükseklik özellikleri

11

kullanın DockPanel yerine "otomatik" olarak ayarlayın. StackPanel açıkça görünür alanla ilgilenmezken, DockPanel mevcut alana dayalı tüm boyut hesaplamalarını yapar.

Güncelleme: benim durumumda Ayrıca

, bir View'a pencerenin gövdesini koyarak ve Pencere daha iyi bir Otomatik Boyut deneyimi için yapar sadece Görünüm sahip.

Herhangi bir nedenle, tüm çocukları doğrudan Pencereye yerleştirmek, çok iyi otomatik boyutlarda görünmüyor.

Güncelleme 2:

Sana kullanılmayan alanı germek (doldurmak) istediğiniz öğeden açık DockPanel.Dock özelliğini ortadan kaldıracaktır.

+0

Yep, DockPanel güzel çalışıyor. Silverlight'ta da çalışıyor. –