WPF - 如何阻止TextBox自动调整?

Rya*_*yan 10 wpf grid textbox autosize

我的视觉树中有一个文本框如下..

  • Window
    • Grid
      • ListBox
        • ItemTemplate
          • DataTemplate
            • Grid
              • Grid
                • Textbox...
文本框定义为..

<TextBox Height="Auto" 
         Text="{Binding Path=LyricsForDisplay}" 
         MinHeight="50" 
         MaxHeight="400"  
         Visibility="Visible" 
         VerticalScrollBarVisibility="Auto" 
         IsReadOnly="True" 
         AllowDrop="False" 
         TextWrapping="WrapWithOverflow">
</TextBox>
Run Code Online (Sandbox Code Playgroud)

当长文本添加到绑定变量(LyricsForDisplay)时,列表框中的所有项目都会展开它们的文本框/网格宽度,以便在使用出现的底部的滚动条时可以看到整个字符串...

我想做的是让它如此框/网格只有在用户拉伸窗口时才会调整大小..不是在输入长文本时(它可能只是环绕......)

有谁知道如何获得功能?

dec*_*one 9

以下作品:

<ListBox Name="ListBox1"
            ScrollViewer.HorizontalScrollBarVisibility="Disabled">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid>
                    <TextBox TextWrapping="Wrap"></TextBox>
                </Grid>
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
Run Code Online (Sandbox Code Playgroud)

注意使用ScrollViewer.HorizontalScrollBarVisibility="Disabled"TextWrapping="Wrap".


Ken*_*art 5

东西需要contrain提供给文本框的水平宽度,你要停止这种情况下,ListBox从水平方向无限增长:

<ListBox HorizontalScrollBarVisibility="Disabled"
Run Code Online (Sandbox Code Playgroud)

  • 实际上是ScrollViewer.Horizo​​ntalScrollBarVisibility。 (3认同)

aja*_*rov 5

不幸的是,常规TextBox不允许自动调整大小以适应父级,但是当文本不合适时不允许自动调整大小。

若要解决此问题,您可以使用自定义的文本框,该文本框报告所需的(0,0)大小。这是一个丑陋的骇客,但确实有效。

在您的.xaml.cs文件中:

public class TextBoxThatDoesntResizeWithText : TextBox
{
    protected override Size MeasureOverride(Size constraint)
    {
        return new Size(0, 0);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,在您的.xaml文件中:

<Window x:Class="YourNamespace.YourWindow"
    ...
    xmlns:local="clr-namespace:YourNamespace">
        ...
        <local:TextBoxThatDoesntResizeWithText Height="Auto" 
                                               Text="{Binding Path=LyricsForDisplay}" 
                                               MinHeight="50" 
                                               MaxHeight="400"  
                                               Visibility="Visible" 
                                               VerticalScrollBarVisibility="Auto" 
                                               IsReadOnly="True" 
                                               AllowDrop="False" 
                                               TextWrapping="WrapWithOverflow">
        </local:TextBoxThatDoesntResizeWithText>
        ...
</Window>
Run Code Online (Sandbox Code Playgroud)


bij*_*iju 0

尝试在文本框中设置MaxWidth属性

<TextBox Height="Auto" Text="{Binding Path=LyricsForDisplay}" MinHeight="50" MaxHeight="400"  Visibility="Visible" VerticalScrollBarVisibility="Auto" MaxWidth="100" IsReadOnly="True" AllowDrop="False" TextWrapping="WrapWithOverflow">                            </TextBox>
Run Code Online (Sandbox Code Playgroud)