WPF TextBox如何不随内容改变宽度 同时左对齐并撑满至设定MaxWidth
我在按照需求设置TextBox属性时遇到问题,已查阅过平台上的同类问题,但均不符合我的实际需求。
我需要设置了固定MaxWidth的TextBox始终优先适配MaxWidth属性值:用户调整窗口尺寸时,控件可按需缩小,最大可拉伸至设定的MaxWidth。同时需要控件左对齐,实现如下效果:
但我设置HorizontalAlignment为"Left"时,TextBox宽度会随内部输入内容变化;设置HorizontalAlignment为"Stretch"时,TextBox会在屏幕居中显示,无法紧贴左侧的按钮。
我需要同时结合这两个属性的效果,但不知道该如何实现。
我没有使用GridColumns做布局,因为存在其他问题导致无法达到预期效果。
以下是我的ButtonEdit(带按钮的TextBox)代码示例:
<dxe:ButtonEdit x:Name="SearchPanel" Margin="52,4,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" NullText="Zadejte hledaný text.." Height="23" MaxWidth="200" AllowDefaultButton="False" Grid.Row="0"> <dxe:ButtonEdit.Buttons> <dxe:ButtonInfo ... </dxe:ButtonInfo> <dxe:ButtonInfo ... </dxe:ButtonInfo> </dxe:ButtonEdit.Buttons> </dxe:ButtonEdit>
请问有人可以帮忙解决这个问题吗?非常感谢。
解决方案
你可以通过在外层套一个单格Grid容器的方式实现需求,不需要用到GridColumns,调整后的代码如下:
<!-- 外层Grid控制布局规则 --> <Grid Margin="52,4,0,0" MaxWidth="200" HorizontalAlignment="Stretch" VerticalAlignment="Top" Grid.Row="0"> <dxe:ButtonEdit x:Name="SearchPanel" HorizontalAlignment="Stretch" VerticalAlignment="Top" NullText="Zadejte hledaný text.." Height="23" AllowDefaultButton="False"> <dxe:ButtonEdit.Buttons> <dxe:ButtonInfo ... </dxe:ButtonInfo> <dxe:ButtonInfo ... </dxe:ButtonInfo> </dxe:ButtonEdit.Buttons> </dxe:ButtonEdit> </Grid>
实现逻辑说明
- 外层Grid设置
HorizontalAlignment="Stretch",会自动适配父容器的可用宽度,同时受你设置的MaxWidth="200"限制,父容器宽度足够时Grid最大宽度为200,父容器变窄时Grid会同步缩小 - Grid本身默认左对齐,不会出现居中问题,内层ButtonEdit填充满整个Grid宽度,自然就实现了左对齐、宽度不随输入内容变化的效果
内容的提问来源于stack exchange,提问作者David Bašta
相关产品推荐
相关产品推荐

