WPF - 如何阻止文本框自动调整大小?

标签 wpf textbox grid 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>
    

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

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

    有谁知道如何获得该功能?

    最佳答案

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

    要解决此问题,您可以使用报告所需 (0, 0) 大小的自定义 TextBox。这是一个丑陋的黑客,但它的工作原理。

    在您的 .xaml.cs 文件中:

    public class TextBoxThatDoesntResizeWithText : TextBox
    {
        protected override Size MeasureOverride(Size constraint)
        {
            return new Size(0, 0);
        }
    }
    

    然后,在您的 .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>
    

    关于WPF - 如何阻止文本框自动调整大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4465646/

    相关文章:

    javascript - CSS 和 JS : How to Inflate the Size of a Tile In Grid

    wpf - WPF DataGrid 的平滑滚动

    wpf - 如何解决 AllowsTransparency=true 的 WPF 窗口中的 ActiveX WebBrowser 缺陷

    c# - ComboBox SelectedItem 未显示其值

    javascript - 如何在自动完成文本框 jquery 中使用数组?

    c# - 动画网格从一个位置到另一个

    wpf - 当命令 CanExecute 为 false 时,按钮不会被禁用

    C# 文件浏览至 textbox.text only .doc .txt 等

    javascript - 如何在 aspx 页面中将焦点设置在用户控件文本框上?

    javascript - 使用 html/js 创建可点击网格的最有效方法是什么?