阻止TextBox在WPF中进行水平扩展

dca*_*iro 10 wpf textbox word-wrap

我在App.xaml中定义了以下样式

<Style x:Key="textBoxMultiline" TargetType="{x:Type TextBox}" >
    <Setter Property="VerticalScrollBarVisibility" Value="Auto" />
    <Setter Property="HorizontalScrollBarVisibility" Value="Hidden" />
    <Setter Property="MinHeight" Value="50" />
    <Setter Property="TextWrapping" Value="Wrap" />
</Style>
Run Code Online (Sandbox Code Playgroud)

在整个解决方案中,我们在每个需要简短文本的文本框中使用它.

<TextBox x:Name="textBoxDescription" Grid.Row="2" Grid.Column="1" Style="{DynamicResource textBoxMultiline}" />
Run Code Online (Sandbox Code Playgroud)

一切都很好,但随后客户抱怨一些字段在较低分辨率的旧显示器上被取下,所以我ScrollViewer在一个较高的可视树节点上放置一个以防止整理.

<ScrollViewer Height="Auto" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
   ...
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)

奇怪的是,TextBox具有上述风格的es开始向右扩展而不是包裹文本.

有没有办法防止这种情况而不删除ScrollViewer

Mar*_*ari 9

你必须定义一个MaxWidthfor TextBox,否则没有限制,因为ScrollViewer.


Bat*_*eni 8

如果您不想对宽度进行硬编码,那么您可以使用元素绑定父项的宽度...这是一个示例

这里我将文本框maxwidth与scrolviewer实际宽度绑定..并且你还必须确保columndefinition width应设置为"*"而不是"Auto".如果你把它设置为自动它将忽略ScrollViewer宽度并继续扩展ScrollViewer和文本框的宽度.. 我认为你属于这种情况 ....

<Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"></ColumnDefinition>
            <ColumnDefinition Width="*"></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <ScrollViewer HorizontalScrollBarVisibility="Auto" Name="scv">
            <TextBox Height="30" TextWrapping="Wrap" MaxWidth="{Binding ElementName=scv,Path=ActualWidth}"></TextBox>
        </ScrollViewer>
    </Grid>
Run Code Online (Sandbox Code Playgroud)


Boj*_*ski 5

@bathineni提供的解决方案帮助我解决了我的问题.这对我有用:

    <Grid >
      <Grid.ColumnDefinitions>
      <ColumnDefinition Width="50"/>
      <ColumnDefinition  Width="*"/>
    </Grid.ColumnDefinitions>
      <Button Grid.Column="0" Width="30" Height="23" Margin="10,5" Content="..."/>
      <ScrollViewer  Grid.Column="1" HorizontalScrollBarVisibility="Disabled" verticalScrollBarVisibility="Disabled" Name="scv">
           <TextBox Height="25" Text="Insert here long text" MaxWidth="{Binding ElementName=scv, Path=ActualWidth}" HorizontalAlignment="Stretch" />
      </ScrollViewer>
    </Grid>
Run Code Online (Sandbox Code Playgroud)