2010-03-31 42 views
4

我必须做些什么来获得下面的内部TextBlock来包装其文本而不定义绝对宽度?如何让TextBlock在DockPanel区域内包装文本?

我试过宽度=自动,拉伸,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

您是否曾经找到答案? – 2011-07-27 20:16:35

+0

看看这个答案: http://stackoverflow.com/questions/386039/wpf-textbox-and-scroll-behavior – lambinator 2010-05-30 22:08:08

回答

1

你试图改变滚动条的知名度?

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

禁用滚动条将“工作”,但OP确实需要它。 – 2011-05-05 00:49:08

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; 
} 
相关问题