2010-11-22 13 views
8

Penceremin düzeni olarak bir WPF Izgara kullanıyorum. İki sütun ve herhangi bir sayıda satır vardır. İlk sütun özellikle etiketler için kullanılır ve ikinci sütun kullanıcı-giriş alanları için kullanılır (ör. TextBox, ComboBox, vb.). Benim gereksinimleri şunlardır:WPF TextBlock.TextTrimming Otomatik Boyutlu SütunDefinasyonu Çalışmıyor

  1. İlk sütun ilk şartı meydan okuyan dışında içindekilere 180
  2. İlk sütun zorunluluk boyutu bir 50 minimum genişliğini ve maksimum genişliğe sahip olmalıdır.
  3. İkinci sütun kalan tüm alanı kaplamalıdır.

aşağıda XAML çalıştı: Label" gibi bir şey kesilecek, "180 birimlerinde Fit olmaz Etiket",

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto" MinWidth="50" MaxWidth="180" /> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 

    <TextBlock Text="First Name" TextTrimming="CharacterEllipsis" /> 
    <TextBox Grid.Column="1" Text="{Binding FirstName}" /> 

    <TextBlock Grid.Row="1" Text="Family Name" TextTrimming="CharacterEllipsis" /> 
    <TextBox Grid.Row="1" Grid.Column="1" Text="{Binding FamilyName}" /> 

    <TextBlock Grid.Row="2" Text="Label That Won't Fit in 180 units" TextTrimming="CharacterEllipsis" /> 
    <TextBox Grid.Row="2" Grid.Column="1" Text="{Binding Text}" /> 
</Grid> 

Ben üçüncü sıra etiketi umuyordum O Won ... ". Bunun yerine, "t" eksikinin yarısı ile "Etiketlenmeyecek" etiketine kısıldı.

Web'de bir yerde bulduğum farklı bir yaklaşım denedim.

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition x:Name="LabelColumn" Width="Auto" MinWidth="50" MaxWidth="180" /> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 

    <TextBlock Width="{Binding ActualWidth, ElementName=LabelColumn}" Text="First Name" TextTrimming="CharacterEllipsis" /> 
    <TextBox Grid.Column="1" Text="{Binding FirstName}" /> 

    <TextBlock Grid.Row="1" Width="{Binding ActualWidth, ElementName=LabelColumn}" Text="Family Name" TextTrimming="CharacterEllipsis" /> 
    <TextBox Grid.Row="1" Grid.Column="1" Text="{Binding FamilyName}" /> 

    <TextBlock Grid.Row="2" Width="{Binding ActualWidth, ElementName=LabelColumn}" Text="Label That Won't Fit in 180 units" TextTrimming="CharacterEllipsis" /> 
    <TextBox Grid.Row="2" Grid.Column="1" Text="{Binding Text}" /> 
</Grid> 

Uygulama çalıştırıldığında değil, Expression Blend (Bazen ...) üzerinde çalışma sona erdi. Koşarken, tüm etiketler tamamen kayboldu. WatchColumn.ActualWidth, 80.

Başka hangi seçenekler mevcut olduğunda, tüm TextBlock'ların Gerçek Genişliği 0 olduğunu izleme penceresinden gördüm. Sütun tanımlarına MinWidth ve MaxWidth ayarı her zaman render üzerinde geçerli olmadığı kadar

cevap

7

Sen, TextBlock üzerinde MinWidth ve MaxWidth set olması gerekir. Bağlama ifadeleri içinde ActualWidth kullanmak, ActualWidth'un çoklu oluşturma geçişleri sırasında ayarlandığı ve öngörülemeyen sonuçlar verebileceği için sorunlu olabilir

İlgili konular