我的视觉树中有一个文本框,如下所示..
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/