2011-05-11 18 views
5

Ben gösterilecek metin gerekir görünür hiçbir vert kaydırma ile, daha sonra kaydırma gösterdiğinizde 2'den yüksek hatları:kaydırılabilir TextBlock Ölçekli TAM 2 Hatları

<Border BorderBrush="Black" BorderThickness="1" Grid.Row="1" Grid.ColumnSpan="2"> 
    <ScrollViewer VerticalScrollBarVisibility="Auto" MaxHeight="40"> 
     <TextBlock Text="{Binding RoadsString}" Style="{StaticResource WrapTextStyle}"/> 
    </ScrollViewer> 
</Border> 

deneme uygulayabilirim MaxHeight değeri doğru görünene kadar - ama hangi yazı tipinin belirtileceğini ve hassas olmasını tercih ederim. Tercihen XAML'de.

MaxHeight yazı tipine bağlayabilir miyim? Ya da belki de bulamadığım bir TextBlock özelliği var.

sayesinde Dan (dizeleri ölçülmesi ve bir değer dönüştürücü vb marjları, dolgu, hesaplama girmeden) daha basit çözümlerden

cevap

1

biri (daraltılmış değil) gizli TextBlock ancak sahiptir sadece yapmaktır İstediğiniz birçok satıra ve ActualHeight numarasına görünür TextBlockMaxHeight. Ölçü olarak kullanılan görünmez TextBlock, Hidden olarak ayarlanmış Visibility değerine sahip olmalıdır, böylece gösterilmese bile (Collapsed tamamen kaybolmasına neden olacaktır).

Çalıştığını görmek için yeni bir projeye atabileceğiniz bir gösteri var (kaydırma çubuğunu daha kolay kullanabilmek için 4 satır kullanıyorum).

Bu kısım Window içindeki varsayılan Grid yerine geçer: Window 'ın Yapıcıda

<Grid TextElement.FontSize="12"> 
    <TextBlock Name="limiter" 
       HorizontalAlignment="Left" 
       VerticalAlignment="Top" 
       Width="100" 
       Visibility="Hidden" 
       Background="Gray"> 
    </TextBlock> 
    <ScrollViewer MaxHeight="{Binding ElementName=limiter, Path=ActualHeight}" 
        Margin="40,0" 
        VerticalAlignment="Top" 
        HorizontalAlignment="Stretch" 
        Background="LightGray" 
        VerticalScrollBarVisibility="Auto"> 
     <TextBlock Name="vis" /> 
    </ScrollViewer> 
    <Button Name="AddLine" 
      Padding="8" 
      VerticalAlignment="Bottom" 
      HorizontalAlignment="Center" 
      Click="AddLine_Click">Add A Line</Button> 
</Grid> 

ben (ayrıca Run ve LineBreak elemanları kullanabilirsiniz gizli TextBlock istiyoruz ancak birçok satırları ekleyin) XAML:

var limitString = "AgjZ"; 
limitString = limitString + Environment.NewLine + limitString + Environment.NewLine + limitString + Environment.NewLine + limitString; 
limiter.Text = limitString; 

private int counter = 0; 
private void AddLine_Click(object sender, RoutedEventArgs e) { 
    var newline = string.Empty; 
    if (!string.IsNullOrWhiteSpace(vis.Text)) 
     newline = Environment.NewLine; 
    vis.Text += string.Format(newline + "This is line #{0}.", ++counter); 
} 

gizli TextBlock ihtiyacı istediğiniz biri olarak hemen hemen aynı kapsamda bulunduğu unutmayın: Eğer çizgilerin farklı sayılarla etkisini görebilmek için Button 'ın AddLine_Click işleyicisi, şöyle FontSize ve yazı tipi ile ilgili diğer değerleri miras aldığını göstermek için. ScrollViewer veya görünür TextBlock'da bir şey ayarlanmışsa, gizlenmiş olan TextBlock'a da gitmelidir. Gizlenmiş olanın görünür olanla aynı stile sahip olduğundan emin olmak için ciltleme kullanabilirsiniz.

4

Salt okunur bir TextBox sizin için TextBlock olarak çalışır mı? (- Boy mülkiyet açıkça bir TextBox ayarlanırsa, MaxLines ve MinLines özellik değerleri dikkate alınmaz açıkça Yükseklik ayarlarsanız hariç)

<TextBox MinLines="2" MaxLines="2" IsReadOnly="True" BorderThickness="0" 
VerticalScrollBarVisibility="Auto" Width="200" VerticalAlignment="Top" /> 

MinLines ve MaxLines her zaman tam olarak iki satır olması metin kutusu kısıtlanmış olacaktır.

Bu yaklaşımla gördüğüm bir sorun, TextBox'ın metninin diğer textblock'larla aynı hizaya getirilmemesidir (eğer bunları bir kılavuz sütununa yerleştirdiyseniz).

DÜZENLEME: Sadece metin bloğunuz için bir kenarlık istediğinizi fark ettiniz. Bunun için BorderThickness = "0" parçasından kurtulabilirsiniz.

+0

Teşekkürler, publicgk, bu MÜKEMMEL. Ben aynı ızgarada 2 diğer TextBlocks var Ben de TextBox'a değiştirmek için gong kulüpler, böylece kullanıcı gerekirse/kopyala yapıştırın. – HoltDan