WPF:按可用宽度而不是按其内容扩展 TextBox?

Posted

技术标签:

【中文标题】WPF:按可用宽度而不是按其内容扩展 TextBox?【英文标题】:WPF: Expand TextBox by available width but NOT by its content? 【发布时间】:2011-05-20 21:37:28 【问题描述】:

我需要一个好的解决方案来使网格中的 TextBox 扩展到其可用空间,但不会根据其中文本的长度进行扩展。

我发现的大多数解决方案是制作一个虚拟边框并绑定到它的 ActualWidth 但它对我来说是一个 hacky 解决方案。边框解决方案也需要在边框上设置一个小边距,这一点都不好。将其设置为低会导致 UI 表现得非常奇怪。不喜欢这个解决方案。一定有更好的吗?我想要的只是文本框不随内容扩展。它不应该那么难。请告诉我该怎么做。

编辑:

我注意到的一件奇怪的事情是,以下代码使边框比它必须的大很多:

<Grid>
  <Border Name="dummy1" Background="Red" />
  <TextBox Text="23242342343555554234234444444444423423423432344444444" Width="Binding ActualWidth, ElementName=dummy1" />
</Grid>

替换边框和文本框的顺序使边框很好地适合文本框,但我需要的是相反的。如前所述,将 Margin(在边框上)设置为至少 0.5 可以使其工作,但结果会导致 UI 有点抽搐。

【问题讨论】:

如果您在 Grid 中只有一个 TextBox,它应该默认拉伸到其父级。您确定没有任何东西可以修改您的 Horizo​​ntalAlignment 属性吗?您是在谈论 Grid 控件还是其他一些您称之为 Grid 的控件(如 DataGrid 或 GridView)? 【参考方案1】:

Horizo​​ntalAlignment=拉伸没有帮助? 当水平对齐设置为拉伸时,AFAIK 网格面板将其子元素拉伸到其单元格中的可用空间。

【讨论】:

是的,但是我的网格没有明确的大小,它的单元格应该扩展到它的内容。问题是文本框控件也扩展到其内容......对于我的场景,如果组合框扩展到其内容,但文本框不会这样做。它也扩展了网格和我的窗口,因为我使用 SizeToContent=WidthAndHeight。 所以你想让你的文本框有固定的宽度?在编译时就知道了吗? 嗯,不。它应该填满单元格中的整个给定空间,但绝不会随其文本内容展开。【参考方案2】:

你找到解决这个问题的方法了吗?

您的边框问题的答案:您应该将您的 TextBox-Object 放在边框内。

    <Border Background="Red" Padding="3">
        <Button Content="Button" />
    </Border>

【讨论】:

【参考方案3】:

我使用 DockPanel 来扩展它的可用空间。您也必须设置 Margin:

<DockPanel>
   <TextBox Width="Binding RelativeSource=RelativeSource FindAncestor, AncestorType=DockPanel, Path=ActualWidth" Margin="1" />
</DockPanel>

【讨论】:

以上是关于WPF:按可用宽度而不是按其内容扩展 TextBox?的主要内容,如果未能解决你的问题,请参考以下文章

如何使 DockPanel 中的项目扩展以适应 WPF 中的所有可用空间?

将 WPF 控件设置为扩展以填充可用空间,仅此而已

golang 在golang中管道exec.Cmd(示例按其扩展名对目录下的所有常规文件进行排序)

如何使用 Qt (C++) 检查程序是不是按其名称运行

如何扩展而不是覆盖 WPF 样式

WPF中Auto与*的区别