在 Blazor 中增加文本区域

2024-04-03

我需要一个随着行数增加而增长的文本区域。一旦行被删除,TextArea 就会再次缩小。在最好的情况下具有最大高度。

它如何与 Javascript 一起工作我已经可以在这里阅读:根据内容长度调整文本区域大小 https://stackoverflow.com/questions/995168/textarea-to-resize-based-on-content-length

但不幸的是,据我所知,在 Blazor 中,TextArea 没有可用的“scrollHeight”。

(我的问题涉及Blazor框架 https://dotnet.microsoft.com/apps/aspnet/web-apps/blazor,它允许使用 C# (+HTML/CSS) 进行浏览器前端开发,而不是像 WPF/WinForms 这样的桌面 UI。)


只要您知道文本中有多少行,您就可以使用 TextView 上的“rows”属性,如下所示

<textarea rows="@Rows"
          @bind-value="MyText"
          @bind-value:event="oninput" />

在您的代码中,您可以确定 Rows 的值

请注意,我使用 Math.Max(Rows,2) 来保留至少两行。

private void CalculateSize(string value)
{
  Rows = Math.Max(value.Split('\n').Length, value.Split('\r').Length);
  Rows = Math.Max(Rows, 2);
}

我从处理“MyText”更改的代码中调用CalculateSize - 无论是像这样的自定义设置器还是A.N.Other方法

string _myText;
protected string MyText
{
  get => _myText;
  set
  {
    _myText = value; 
    CalculateSize(value);
  }
}

最大高度可以通过设计方法的 CSS 或通过向CalculateSize 方法添加另一个约束来轻松设置。

private void CalculateSize(string value)
{
  Rows = Math.Max(value.Split('\n').Length, value.Split('\r').Length);
  Rows = Math.Max(Rows, MIN_ROWS);
  Rows = Math.Min(Rows, MAX_ROWS);
}

Option 2

如果您想要简单性并且不介意一些内联 JS(如果您这样做,那么是时候破解 JSInterop...)

<textarea 
      rows="2" 
      placeholder="Sample text."
      style="resize:both;"
      oninput="this.style.height = 'auto'; this.style.height = (this.scrollHeight) + 'px';">
</textarea>

Option 3

如果您确实想使用 JSInterop,您可以执行类似的操作或将代码放入 JS 文件中并将其包含在页面中。

<textarea id="MyTextArea"
      rows="2" 
      placeholder="Sample text."
      @oninput="Resize"></textarea>

<label>This area is @(MyHeight)px</label>
@code
{
[Inject] IJSRuntime JSRuntime { get; set; }
double MyHeight=0;
async Task Resize()
{
    var result = await JSRuntime.InvokeAsync<object>("eval",@"(function() {
            MyTextArea.style.height='auto';
            MyTextArea.style.height=(MyTextArea.scrollHeight)+'px';
            return MyTextArea.scrollHeight;
        })()");
    Double.TryParse(result.ToString(), out MyHeight);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Blazor 中增加文本区域 的相关文章

随机推荐

  • Perl:Javascript::V8 模板 - 来自 Perl

    寻找像 HTML Mason 或 Mason 这样的模板引擎 那么什么将源组件 编译 为 perl 代码 而不是 perl 代码将组件 编译 为 JavaScript 代码 然后使用 Javascript V8 运行 执行它们Perl 模块
  • 可以使用 XSLT 将 XML 拆分为多个页面吗?

    我有一个带有分页指示的 XML 文档 我想将这个单个文件转换为多个输出文件 也就是说 我想转换以下内容
  • 针对 Azure AD 的 WebForms 身份验证

    我有一个 WebForms 站点 它在内部服务器上运行 并根据我们的内部 Active Directory 对用户进行身份验证 由于我们正在实施一些新功能 该网站需要移动到外部服务器 然后更改身份验证 以便根据我们的 Office 365
  • 覆盖 Altair 折线图的默认分组?

    我想制作一张图表 其中一条线在沿线的不同位置具有不同的颜色 这不起作用 import altair as alt import numpy as np import pandas as pd x np linspace 0 1 y x 2
  • 禁用/隐藏辅助功能元素

    我试图从 VoiceOver 中隐藏应用程序中的多个元素 以便屏幕阅读器不会大声朗读它们 在 iOS 上 我设置isAccessibilityElement to NO 但这对 OSX 没有影响 从 VoiceOver 隐藏元素的正确方法是
  • Firebase LatLng 缺少不带参数的构造函数

    我将坐标存储在实时数据库中 但在尝试检索数据时收到错误消息 错误信息是 com google firebase database DatabaseException com google android gms maps model Lat
  • np.argsort 和 pd.nsmallest 给出不同的结果

    示例数据和代码如下 import pandas as pd import numpy as np np random seed 2021 dates pd date range 20130226 periods 90 df pd DataF
  • 由于 Windows 更新,Azure 云服务应用程序(Web 角色)偶尔会停机约 10 分钟?我该如何安排它们?

    它似乎每隔几个月左右就会发生一次 虽然它通常会在大约 10 分钟内自动恢复 但我仍然想了解如何更改 Windows 更新计划 因为它经常在工作时间发生 我们在各种 Azure 订阅中有多个 Web 应用程序 它们都以这种方式运行 一旦我们收
  • 并排 div

    如何并排放置两个 div 并在它们之间使用分离器 那就是我的意思 我假设 html 布局看起来像这样 div div div div div div div div or div div div div div div div div ht
  • 通过 HTTPS 以 JSON 格式发送密码是否安全?

    如果我通过 HTTPS 发送 JSON 格式的密码来执行身份验证 安全吗 有更好的方法吗 一般来说 将用户名和密码发送到服务器以执行身份验证的最佳方法是什么 一般来说 是的 这对于被动网络窃听者是安全的 这是人们在这种架构中担心的主要威胁
  • 预加载器继续加载并且在加载内容时不会消失

    好的 首先 这是我的代码 var loader document getElementById loader window addEventListener loader function loader style display none
  • 是否有与 C++ std::partial_sort 等效的 C# ?

    我正在尝试为可通过许多标准排序的数据集实现分页算法 不幸的是 虽然其中一些标准可以在数据库级别实现 但有些必须在应用程序级别完成 我们必须与另一个数据源集成 我们有分页 实际上是无限滚动 要求 并且正在寻找一种方法来最大程度地减少每次分页调
  • ASP.NET-Identity:如何限制用户名长度?

    我怎样才能限制长度UserName表中的字段AspNetUsers 这都不是 public class ApplicationUser IdentityUser Required MaxLength 15 public string Use
  • C# 7 基于元组的变量交换线程安全吗?

    在 C 7 的元组之前 交换两个变量的标准方法如下 var foo 5 var bar 10 var temp foo foo bar bar temp 但现在我们可以使用 foo bar bar foo 它在一条线上 而且更漂亮 但它是线
  • 绘图错误“您的浏览器不支持 WebGL”

    我正在尝试使用创建一些 3D 绘图plotly包裹 我使用的代码是他们的教程示例 library plotly volcano is a numeric matrix that ships with R fig lt plot ly z v
  • 使用 RC.EXE 或 BRCC32.EXE 构建 *.rc 文件时包含文件的行为有所不同

    我希望在我的 Delphi 项目的 RC 文件中使用点 作为资源条目 但是 Delphi 的 BRCC32 exe 不允许在资源命名中使用点 从Delphi 2010开始 我们可以在中指定 要使用的资源编译器 Project Option
  • 非常简单的 Firestore 事务失败

    我正在为一项超级简单的交易而苦苦挣扎 它总是失败并显示消息 事务所有重试均失败 但除此之外没有任何错误消息logcat 当我调试它时 我发现它被重试了几次 我真的不知道为什么 因为其他交易运行没有问题 我只想将一个文档从一个集合克隆到另一个
  • 使用 UIImagePickerController 时出现内存警告

    当我在 iPhone 上使用相机时收到内存警告 我也在使用 ARC 当您拍照并按相机视图控制器上的 使用照片 按钮时 我会收到内存警告 目的是一旦按下 使用照片 按钮 它就会更改 ImageView 的内容 我认为内存问题可能是由于捕获的图
  • 如何在 Sublime Text 中格式化 django 模板

    如何在 Sublime Text 中格式化 django 模板 我的模板包括 HTML django 模板语言与 variable and stuff javascript 有没有办法获得 PyCharm 提供的相同类型的格式 这个包应该可
  • 在 Blazor 中增加文本区域

    我需要一个随着行数增加而增长的文本区域 一旦行被删除 TextArea 就会再次缩小 在最好的情况下具有最大高度 它如何与 Javascript 一起工作我已经可以在这里阅读 根据内容长度调整文本区域大小 https stackoverfl