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,它应该默认拉伸到其父级。您确定没有任何东西可以修改您的 HorizontalAlignment 属性吗?您是在谈论 Grid 控件还是其他一些您称之为 Grid 的控件(如 DataGrid 或 GridView)? 【参考方案1】:HorizontalAlignment=拉伸没有帮助? 当水平对齐设置为拉伸时,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 中的所有可用空间?