2009-11-17 25 views

cevap

74

Çoğu denetim için XAML'deki yüksekliğini ve genişliğini Auto olarak ayarlarsınız ve içeriği sığacak şekilde boyutlandırır.

Kodda, genişliği/yüksekliği double.NaN olarak ayarlarsınız. Ayrıntılar için, bkz. FrameworkElement.Width, özellikle "açıklamalar" bölümü.

+34

Yatay ve Dikey Geçişleri, mevcut bir alanı doldurmalarına neden olacak şekilde Streç'e geçmelidir, bu nedenle muhtemelen bu özellikleri belirtmeniz gerekecektir. HorizontalAlignment = "Sol" VerticalAlignment = "Üst". –

26

Penceremin genişliğini belirttiğim, ancak yüksekliği Auto olarak ayarlanmış olan böyle bir sorun yaşadım. DockPanel numaralı çocukta, VerticalAlignment öğesi En Üst olarak ayarlanmıştı ve Pencere, VerticalContentAlignment öğesi En Yüksek olarak ayarlanmıştı, ancak Pencere hala içerikten daha uzun olurdu.

Snoop kullanarak, Pencere içinde ContentPresenter (Pencere parçası, bir şey orada koymuştu) o VerticalAlignment seti Stretch içelim sahiptir ve tüm Pencere retemplating olmadan değiştirilemez keşfetti!

Çok fazla hayal kırıklığı yaşadıktan sonra, SizeToContent özelliğini keşfettim - Pencerenin, içeriğin boyutuna göre dikey, yatay veya her ikisini de boyutlandırmasını isteyip istemediğinizi belirtmek için bunu kullanabilirsiniz - her şey güzel bir şekilde boyutlandırılıyor, ben Sadece bu özelliği bulmak için bu kadar uzun sürdüğüne inanamıyorum!

+7

Tüm Izgaraların bu özelliğe sahip olmasını diliyorum ... – Shimmy

+4

Sorun, üst düzey pencereye uygulandığında SetBoyutToContent = "WidthAndHeight". Bu konuda saatlerimi kaybettim - sezgisel değil! Bkz. Http://stackoverflow.com/questions/812079/window-heightauto-problem – DeveloperDan

+1

Bir "Pencere" bir "Denetim" olsa da, OP'nin "SizeToContent" olmayan bir "UserControl" öğesine başvurduğunu düşünüyorum. mülk. Aksi halde OP, konudaki "Pencere" terimini kullanır. – ProfK

1

Kılavuz veya benzeri bileşen kullanıyorsanız: XAML'de, ızgaradaki öğelerin Grid.Row ve Grid.Column öğelerinin tanımlandığından ve kenar boşluklarının olmadığından emin olun. Tasarımcı modu veya İfade Karışımı kullandıysanız, belirli hücrelere değil, tüm ızgaraya göre kenar boşlukları atamış olabilir. Hücre boyutlandırma gelince , uzayda kalan doldurur ekstra hücre ekleyin:

<Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
1

özgür bir şekilde bir şekilde sayfadaki oturdu bir kullanıcı kontrolü vardı, başka bir kaba tarafından kısıtlı değil Kullanıcı denetimi içerisindeki içerikler otomatik olarak boyutlandırılmaz, ancak kullanıcı kontrolünün eline geçtiğinde tam boyutta genişler.

Ben bu gibi oto boyutuna ayarlanmış satırda bir şebekeye aktarmak yerleştirilen, sadece yükseklik için, içeriğine basitçe boyuta kullanıcı kontrolünü almak için: denetimlerinin bir sürü set ek olarak

<Grid Margin="0,60,10,200"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 
    <controls1:HelpPanel x:Name="HelpInfoPanel" 
         Visibility="Visible" 
         Width="570" 
         HorizontalAlignment="Right" 
         ItemsSource="{Binding HelpItems}" 
         Background="#FF313131" /> 
</Grid>