WPF TextBox - 如何停止宽度随值的变化

WPF TextBox - how to stop width change with value

我在完全按照需要设置 TextBox 时遇到问题。我在这里阅读了类似的问题,但其中 none 的要求与我相同。

基本上我需要带有一些 MaxWidth 的文本框来始终尝试适应 MaxWidth 属性。如果用户更改 window 的大小,它应该根据需要缩小,或者增大到 MaxWidth。但与此同时,我需要它向左对齐,以创建这样的外观:

但是当我将 Horizo​​ntalAlignment 设置为“左”时 - 文本框会根据内部值更改宽度。 当我将 Horizo​​ntalAlignment 设置为“拉伸”时 - 文本框位于屏幕中间,而不是按钮旁边的左侧。

我需要这两个属性的某种组合,但我不知道该怎么做。

我没有使用 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}}