2010-03-31 2 views
4

Que dois-je faire pour obtenir le TextBlock intérieur ci-dessous pour envelopper son texte sans définir une largeur absolue?Comment obtenir un TextBlock pour emballer du texte dans une zone DockPanel?

J'ai essayé Width = Auto, Stretch, TextWrapping, en le plaçant dans un StackPanel, rien ne semble fonctionner.

alt text http://www.deviantsart.com/upload/120rjpv.png

XAML:

<UserControl x:Class="Test5.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:tk="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit" 
    Width="800" 
    Height="600"> 
    <tk:DockPanel LastChildFill="True"> 

     <StackPanel tk:DockPanel.Dock="Top" 
      Width="Auto" 
      Height="50" 
      Background="#eee"> 
      <TextBlock Text="{Binding TopContent}"/> 
     </StackPanel> 

     <StackPanel tk:DockPanel.Dock="Bottom" Background="#bbb" 
      Width="Auto" 
      Height="50"> 
      <TextBlock Text="bottom area"/> 
     </StackPanel> 

     <StackPanel tk:DockPanel.Dock="Right" Background="#ccc" 
      Width="200" 
      Height="Auto"> 
      <TextBlock Text="info panel"/> 
     </StackPanel> 

     <StackPanel tk:DockPanel.Dock="Left" Background="#ddd" 
      Width="Auto" 
      Height="Auto"> 
      <ScrollViewer HorizontalScrollBarVisibility="Auto" Padding="10" 
      BorderThickness="0" 
       Width="Auto" 
       VerticalScrollBarVisibility="Auto"> 
       <tk:DockPanel HorizontalAlignment="Left" Width="Auto" > 
        <StackPanel tk:DockPanel.Dock="Top" HorizontalAlignment="Left"> 
         <Button Content="Add More" Click="Button_Click"/> 
        </StackPanel> 
        <TextBlock tk:DockPanel.Dock="Top" 
         Text="{Binding MainContent}" 
         Width="Auto" 
         TextWrapping="Wrap" /> 
       </tk:DockPanel> 
      </ScrollViewer> 
     </StackPanel> 

    </tk:DockPanel> 
</UserControl> 
+0

Avez-vous déjà trouvé une réponse? –

+0

Consultez cette réponse: http://stackoverflow.com/questions/386039/wpf-textbox-and-scroll-behavior – lambinator

Répondre

1

Avez-vous essayé de changer la visibilité de la barre de défilement?

<ScrollViewer HorizontalScrollBarVisibility="Disabled" Padding="10" 
      BorderThickness="0" 
       Width="Auto" 
       VerticalScrollBarVisibility="Auto"> 
+0

La désactivation de la barre de défilement «fonctionnera» mais l'OP le veut. –

1

Pour une raison quelconque, la solution évidente (élégante) ne semble pas fonctionner dans SL:

<ScrollViewer Name="w_scrollViewer" HorizontalScrollBarVisibility="Auto" Padding="10" 
BorderThickness="0" Width="Auto" VerticalScrollBarVisibility="Auto"> 
    <tk:DockPanel Name="w_dp" HorizontalAlignment="Left" Width="Auto" > 
     <TextBlock Margin="2" Name="w_tb" 
        Text="{Binding MainContent}" TextWrapping="Wrap" 
        Width="{Binding ActualWidth, ElementName=w_scrollViewer}" 
        /> 
    </tk:DockPanel> 
</ScrollViewer> 

mais un peu plus "rugueux":

<StackPanel SizeChanged="w_sp_SizeChanged" Name="w_sp" tk:DockPanel.Dock="Left" 
      Background="#ddd" Width="Auto" Height="Auto"> 
    <ScrollViewer Name="w_scrollViewer" HorizontalScrollBarVisibility="Auto" 
        Padding="10" Width="Auto" VerticalScrollBarVisibility="Auto" 
        SizeChanged="HandleScrollViewerSizeChanged" > 
     <tk:DockPanel HorizontalAlignment="Left" Width="Auto" > 
      <TextBlock Name="w_textBlock" Text="{Binding MainContent}" TextWrapping="Wrap" /> 
     </tk:DockPanel> 
    </ScrollViewer> 
</StackPanel> 
Code

derrière :

private void HandleScrollViewerSizeChanged(object sender, SizeChangedEventArgs e) 
{ 
    w_textBlock.Width = w_scrollViewer.ActualWidth; 
} 
Questions connexes