2010-03-31 11 views
4

Что мне нужно сделать, чтобы заставить внутренний TextBlock ниже обернуть текст без определения абсолютной ширины?Как получить TextBlock для обертывания текста внутри области DockPanel?

Я пробовал Width = Auto, Stretch, TextWrapping, помещая его в StackPanel, ничего не работает.

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

Вы когда-нибудь находили ответ? –

+0

Отметьте этот ответ: http://stackoverflow.com/questions/386039/wpf-textbox-and-scroll-behavior – lambinator

ответ

1

Вы пробовали изменения видимость полосы прокрутки?

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

Отключение полосы прокрутки будет «работать», но OP этого хочет. –

1

По какой-то причине очевидного (элегантный) решение, кажется, не работает в 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> 

, но немного более "грубый" путь:

<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> 

код позади :

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

 Смежные вопросы

  • Нет связанных вопросов^_^