WPF TextBox - 如何停止宽度随值的变化
WPF TextBox - how to stop width change with value
我在完全按照需要设置 TextBox 时遇到问题。我在这里阅读了类似的问题,但其中 none 的要求与我相同。
基本上我需要带有一些 MaxWidth 的文本框来始终尝试适应 MaxWidth 属性。如果用户更改 window 的大小,它应该根据需要缩小,或者增大到 MaxWidth。但与此同时,我需要它向左对齐,以创建这样的外观:
但是当我将 HorizontalAlignment 设置为“左”时 - 文本框会根据内部值更改宽度。
当我将 HorizontalAlignment 设置为“拉伸”时 - 文本框位于屏幕中间,而不是按钮旁边的左侧。
我需要这两个属性的某种组合,但我不知道该怎么做。
我没有使用 GridColumns 作为我的布局,因为还有其他问题,因此我无法创建我想要的结果。
这是我的 ButtonEdit 示例 - 这是带有按钮的文本框:
<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 Grid.Row="0" VerticalAlignment="Top">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" MaxWidth="200"/>
</Grid.ColumnDefinitions>
<dxe:ButtonEdit
x:Name="SearchPanel"
Margin="52,4,0,0"
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>
问题是 HorizontalAlignment="Stretch"
总是意味着控件居中(据我所知)。大多数时候无关紧要,除了,例如,当与 MaxWidth
.
结合使用时
网格列的行为略有不同,即使被告知占用所有可用 space(即拉伸)与 Width="*"
,网格列仍保持左对齐。
好的,我设法解决了这个问题,诀窍是在运行时使用绑定计算 With。当我使用 DevExpress 控件时,这是解决方案:
Width="{DXBinding '@a($Grid).ActualWidth - 50'}"
或者没有 DevExpress - 这也应该有效:
{Binding Path=ActualWidth, RelativeSource={RelativeSource AncestorType=Grid}, Converter={local:WidthConverter}}
我在完全按照需要设置 TextBox 时遇到问题。我在这里阅读了类似的问题,但其中 none 的要求与我相同。
基本上我需要带有一些 MaxWidth 的文本框来始终尝试适应 MaxWidth 属性。如果用户更改 window 的大小,它应该根据需要缩小,或者增大到 MaxWidth。但与此同时,我需要它向左对齐,以创建这样的外观:
但是当我将 HorizontalAlignment 设置为“左”时 - 文本框会根据内部值更改宽度。 当我将 HorizontalAlignment 设置为“拉伸”时 - 文本框位于屏幕中间,而不是按钮旁边的左侧。
我需要这两个属性的某种组合,但我不知道该怎么做。
我没有使用 GridColumns 作为我的布局,因为还有其他问题,因此我无法创建我想要的结果。
这是我的 ButtonEdit 示例 - 这是带有按钮的文本框:
<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 Grid.Row="0" VerticalAlignment="Top">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" MaxWidth="200"/>
</Grid.ColumnDefinitions>
<dxe:ButtonEdit
x:Name="SearchPanel"
Margin="52,4,0,0"
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>
问题是 HorizontalAlignment="Stretch"
总是意味着控件居中(据我所知)。大多数时候无关紧要,除了,例如,当与 MaxWidth
.
网格列的行为略有不同,即使被告知占用所有可用 space(即拉伸)与 Width="*"
,网格列仍保持左对齐。
好的,我设法解决了这个问题,诀窍是在运行时使用绑定计算 With。当我使用 DevExpress 控件时,这是解决方案:
Width="{DXBinding '@a($Grid).ActualWidth - 50'}"
或者没有 DevExpress - 这也应该有效:
{Binding Path=ActualWidth, RelativeSource={RelativeSource AncestorType=Grid}, Converter={local:WidthConverter}}