İçeriğindeki içeriğe göre boyutunu değiştirmek için WPF denetimini nasıl yapabilirim?Wpf kontrol boyutu içeriğe mi?
cevap
Ç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ü.
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!
Tüm Izgaraların bu özelliğe sahip olmasını diliyorum ... – Shimmy
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
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
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>
ö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>
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". –