2012-09-14 48 views
1

我正在尝试使TextBox包装文本并与Window一起增长。如果我没有设置ScrollViewerHorizontalScrollBarVisibility属性,那就行得通了。但如果我这样做,TextBox将无限增长。通过将MaxWidth属性设置为TextBox可以解决问题,但在这种情况下,TextBox不会超出MaxWidth值。我的想法是绑定MaxWidthColumnDefinitionActualWidth,但这也不起作用,因为ColumnDefinitionActualWidth属性不是DependencyProperty。这里是我的代码:水平滚动条可防止文本框包装

<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto" /> 
       <ColumnDefinition Width="*" /> 
      </Grid.ColumnDefinitions> 
      <TextBlock Grid.Row="0" Grid.Column="0" Text="Name:" Margin="5" /> 
      <TextBox MinWidth="200" Grid.Row="0" Grid.Column="1" TextWrapping="Wrap" AcceptsReturn="True" Margin="5"/> 
     </Grid> 
    </ScrollViewer> 

任何想法将不胜感激。

+0

你为什么要水平滚动条如果文本应该反正包? –

+0

@FredrikMörk因为MinWidth,我想要滚动条。如果用户使窗口小于MinWidth值,我不想显示滚动条。而且,窗口上可能还有其他控件。 – Vale

回答

2

试试这个:

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 
    <TextBlock Text="Name:" Margin="5" /> 
    <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" Grid.Column="1"> 
     <TextBox MinWidth="200" TextWrapping="Wrap" AcceptsReturn="True" Margin="5" MaxWidth="{Binding Path=ActualWidth, RelativeSource={RelativeSource AncestorType={x:Type ScrollViewer}}}" /> 
    </ScrollViewer> 
</Grid> 
+0

我不希望ScrollViewer在每个TextBox周围。我在页面上有10个左右。 – Vale

+0

@Vale在同一个ScrollViewer中有多于TextBlock/TextBox(其他控件?)对吗?你仍然可以使用相同的绑定到MaxWidth,虽然你可能想使用转换器来调整一些值.. – Eirik

+0

我会尝试使用转换器。看起来它会起作用。 – Vale