WPF 文本框和滚动行为

2023-12-02

我有个问题。 我需要在 ScrollViewer 中托管带有控件的网格,以防止文本框在 UI 上被截断或折叠为零。另外,我希望当用户更改窗口宽度时扩展文本框。 我将窗口的内容设置为以下代码

<DockPanel>
    <TreeView DockPanel.Dock="Left" Width="150"/>
    <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <TextBlock Text="Name" 
                       Margin="5" 
                       VerticalAlignment="Center"/>
            <TextBox Grid.Column="1"
                     Text="Some Name"
                     Margin="5"
                     VerticalAlignment="Center"
                     MinWidth="200"/>
        </Grid>
    </ScrollViewer>
</DockPanel>

一切正常,但是当用户在 TextBox 中键入很长的文本时,它会被扩展并出现水平滚动。 是否有任何简单的方法来限制 TextBox 最大宽度并仅在用户更改窗口大小时才允许其扩展。


问题在于,父元素为 TextBox 提供了它认为需要的空间,并且当存在更多文本时,它会扩展而不是保持初始自动大小。

这里的一个解决方案是创建另一个自动调整大小的元素并将 TextBox.Width 绑定到它:

<DockPanel>
    <TreeView Width="150" DockPanel.Dock="Left"/>
    <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <TextBlock Margin="5" VerticalAlignment="Center" Text="Name"/>
            <Border x:Name="b" Grid.Column="1" Margin="5"/>
            <TextBox Width="{Binding ActualWidth, ElementName=b}"
                     MinWidth="200"
                     Grid.Column="1"
                     Margin="5"
                     VerticalAlignment="Center"
                     Text="Some Name"/>
        </Grid>
    </ScrollViewer>
</DockPanel>

请注意,我们设置了自动调整大小元素(边框)的 Margin 属性。这很重要,因为如果不设置,就会出现循环:

  1. 边框宽度自动调整为网格列宽度
  2. TextBox 宽度调整为 Border.ActualWidth
  3. 网格列宽度调整为 TextBox 宽度 + TextBox 边距
  4. 边框宽度再次自动调整为网格列宽

通过将 Margin 设置为与 TextBox 相同,TextBox 的大小调整不会影响 Grid 大小。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF 文本框和滚动行为 的相关文章

随机推荐

  • 如何在打字稿中使用 jquery ui 和 commonjs

    为了获得更多上下文 我决定将所有模块保留为 commonjs 格式以实现可移植性 并使用 browserify 和其他一些东西来捆绑前端的东西 我使用 TypeScript 进行类型检查 但我不确定如何在我的配置中使用 jquery ui
  • 如何创建随机 3D 矩阵?

    有没有办法随机创建 3D 矩阵 有多种方法可以使用以下方法创建随机二维矩阵randint功能 有没有类似的内置功能 例如 使用以下命令可以轻松生成 4x4 矩阵randint功能 如果我想创建一个 4x4x3 维度的矩阵怎么办 您可以使用r
  • Struts逻辑:迭代输入字段

    我目前有以下代码 数据显示良好
  • PHP strtotime 对于小于 1900 的日期返回 false

    我知道这个问题很受欢迎 在这里问PHP strtotime 对于未来的日期返回 false 和这里如何在 PHP 中处理 1900 年之前的日期 您能否确认我的选择 升级到64位架构 将 strtotime 调用替换为 DateTime D
  • 如何在WinForms系统菜单中显示带有图标和文本的菜单项

    在调整的同时answer of ygoe 我发现可以向菜单添加图标 我尝试并成功地通过将此代码用于纯文本项目来做到这一点 var item new MenuItemInfo cbSize uint Marshal SizeOf typeof
  • HTML textarea:使用 JavaScript 获取换行文本?

    如果我有一个像这样的文本区域
  • 只读取txt文件中给定的最后x行[重复]

    这个问题在这里已经有答案了 目前我正在使用 File ReadAllText 读取文件内容 但现在我需要读取 txt 文件中的最后 x 行 我怎样才能做到这一点 内容myfile txt line1content line2content
  • 如何在 tensorflow.js 模型中添加图像并针对给定图像标签训练模型

    我们使用 TensorFlow js 来创建和训练模型 我们使用 tf fromPixels 函数将图像转换为张量 我们想要创建一个具有以下属性的自定义模型 AddImage HTML Image Element Label 添加带有自定义
  • JqG​​rid addJSONData + ASP.NET 2.0 WS

    我有点失落 我尝试实现一个基于 JqGrid 的解决方案 并尝试使用函数作为数据类型 我猜我已经按照书本设置了所有内容 我调用了 WS 并返回了 JSON 我在 ajax 调用中在客户端取得了成功 并且我使用 绑定 jqGridaddJSO
  • 发送 AJAX 结果但继续在 PHP 中处理

    我正在使用 AJAX 更新数据库中的一些值 一切都工作得很好 但现在我想实现一些日志记录的东西 日志记录功能看起来需要花费相当多的处理时间 并且用户没有理由必须等待它们完成才能看到 AJAX 结果 因此 我正在尝试找到一种方法来发送 AJA
  • 如何在Java中读取同一行的多个输入?

    因此 我尝试使用扫描仪读取一行中的所有输入 然后获取值并找到第二大值 我会使用一个数组BUT我不被允许 您应该输入 10 个整数 按 Enter 键并计算它们 像这样的事情 10 20 30 40 50 60 70 80 90 100 EN
  • 在 C 程序中使用 _ 和 __ [重复]

    这个问题在这里已经有答案了 我正在读K R的书 我读 仅供标准库函数使用的名称 首先 所以它们不太可能与中的名称发生冲突 用户程序 这到底是什么意思 请解释一下真正简单实用的方法 我的理解是 如果我想使用 math h 中定义的 sqrt
  • 无法从根提供程序 .Net Core 2 解析范围服务

    当我尝试运行我的应用程序时 出现错误 InvalidOperationException Cannot resolve API Domain Data Repositories IEmailRepository from root prov
  • Slick:具有左连接的查询中的动态排序

    这是一个源自于的问题另一个问题 我需要能够动态传递要在具有左连接的 Slick 查询中排序的列 在这种特殊情况下的问题是左连接表变得可选 我不知道如何处理它 如果我做桌子Company不是可选的我得到SlickException Read
  • 如何修改出站 CXF 请求的原始 XML 消息?

    我想修改传出的 SOAP 请求 我想从信封主体中删除 2 个 xml 节点 我设法设置了一个拦截器 并将生成的消息集的字符串值获取到端点 但是 以下代码似乎不起作用 因为传出消息未按预期进行编辑 有没有人有一些关于如何做到这一点的代码或想法
  • 使用 htaccess 删除目录后的尾部斜杠

    我想删除 当我想访问子目录文件夹中的索引文件时 例如 www example com test dashboard to www example com test dashboard 我试过这个 RewriteEngine On Remov
  • 使用 --call-stack fp 进行性能记录无法展开主函数

    我有一个 C 测试程序 可以让 CPU 保持忙碌 include
  • Scala Option 隐式转换 - 不好的做法或缺少功能?

    我将我的数据模型表示为案例类 键入可能为空的值作为选项 case class Document id Long title String subtitle Option String 现在我尝试实例化案例类 Document 123 The
  • CLBeaconRegion,如何关闭警告:打开蓝牙以允许*连接到配件

    我们有一个项目正在使用 CoreLocation 区域来监视 iBeacon 区域在应用程序后台进入 退出 CLBeaconRegion CLRegion CLBeacon 等 当进入 CLBeacon iBeacon 区域时 CLLoca
  • WPF 文本框和滚动行为

    我有个问题 我需要在 ScrollViewer 中托管带有控件的网格 以防止文本框在 UI 上被截断或折叠为零 另外 我希望当用户更改窗口宽度时扩展文本框 我将窗口的内容设置为以下代码