TextBox上的MinLines和MaxLines无法正常工作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TextBox上的MinLines和MaxLines无法正常工作相关的知识,希望对你有一定的参考价值。

任何人都可以解释为什么以下TextBox最初不会显示为3行高?它显示1行高,然后在我开始键入文本时调整为3。

编辑:这里有一些表格

<Window x:Class="MyNamespace.Views.DetailsView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:MV="clr-namespace:MyNamespace.Views"
    xmlns:prop="clr-namespace:MyNamespace.Properties"
    xmlns:toolkit="http://schemas.microsoft.com/wpf/2008/toolkit"
    MV:DialogCloser.DialogResult="{Binding Path=DialogResult, Mode=TwoWay}"
    Background="{StaticResource {x:Static SystemColors.ControlBrushKey}}" 
    Title="{Binding Source={x:Static prop:Resources.MyView_Caption}}"
    SizeToContent="WidthAndHeight" 
    WindowStartupLocation="CenterScreen" 
    WindowStyle="SingleBorderWindow" 
    MinHeight="100" 
    MinWidth="250">
<StackPanel Name="AllItems" Orientation="Horizontal">
    <StackPanel Width="450" Margin="5">
        <StackPanel Margin="5,0,5,0" VerticalAlignment="Center">
            <DockPanel Margin="5" >
                <Label Content="Prompt"/>
                <TextBox MaxLines="3"
                     MinLines="3" 
                     VerticalScrollBarVisibility="Auto"
                     TextWrapping="Wrap" />
            </DockPanel>
        </StackPanel>
    </StackPanel>
</StackPanel>
...
</Window>
答案

是的,我也遇到过这个问题。 TextBox最初在启动时不会正确调整大小,您可以通过将Text属性与启动文本绑定来解决此问题(比较一个balnk空间值“”)。

XAML:

<StackPanel Margin="5,0,5,0" VerticalAlignment="Center">
 <DockPanel Margin="5" >
 <Label Content="Prompt"/>
 <TextBox MaxLines="3"
         MinLines="3" x:Name="text"
         VerticalScrollBarVisibility="Auto"
         Text="{Binding StartUpText}"
         AcceptsReturn="True"
         TextWrapping="Wrap" TextChanged="text_TextChanged" Loaded="text_Loaded"  />
 </DockPanel>
</StackPanel>

C#:

public MainWindow()
    {
        InitializeComponent();
        this.DataContext=this;
         StartUpText = " ";
    }

private string startUpText;
public string StartUpText
{
  get { return startUpText; }
  set
  {
    if (value != startUpText)
    {
        startUpText = value;
    }
  }
}
另一答案

您还可以在Text上使用FallbackValue:

<StackPanel Margin="5,0,5,0" VerticalAlignment="Center">
     <DockPanel Margin="5" >
          <Label Content="Prompt"/>
          <TextBox MaxLines="3"
              MinLines="3" x:Name="text"
              VerticalScrollBarVisibility="Auto"
              Text="{Binding StartUpText, FallbackValue=whatyouwant}"
              AcceptsReturn="True"
              TextWrapping="Wrap" TextChanged="text_TextChanged" Loaded="text_Loaded"  />
     </DockPanel>
</StackPanel>
另一答案

我使用Height属性与MaxLines结合导致了同样的问题。

“如果在TextBox上显式设置了Height属性,则忽略MaxLines和MinLines属性值。” - https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.textbox.maxlines?view=netframework-4.8

通过使用高度解决了这个问题,因此在给定高度中只能输入5行

以上是关于TextBox上的MinLines和MaxLines无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

颤振,根据设备的 dpi 调整 fontsize 和 maxline

WPF 文本框的多行

关于shutdown和close

《UNIX网络编程》 -- 第五章

从后面的代码中过滤 TextBox 的 KeyPress 事件上的 GridView

Wpf TextBox上的键盘小数分隔符,如何?