如何将WrapPanel中元素的最大宽度限制为WrapPanel的宽度?

时间:2015-08-20 05:50:06

标签: c# .net wpf xaml

我有一个WrapPanel我已经放置了一些Grid,我已经放置了一些TextBox es,类似于以下内容:

<WrapPanel Orientation="Horizontal">
    <!-- Other label / text box pair grids -->
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="Auto" />
        </Grid.ColumnDefinitions>
        <Label Grid.Column="0" Content="FancyLabel" Margin="1,1,1,0"/>
        <TextBox Name="FancyValue"
                 Grid.Column="1"
                 Margin="1,1,1,0"
                 Text="{Binding}"
                 MinWidth="45"
                 Width="Auto"
                 TextWrapping="Wrap"
                 AcceptsReturn="False" />
    </Grid>
</WrapPanel>

如果用户输入的文字太长,而不是换行到额外的行,则TextBox会将其宽度从屏幕上展开,而不是尊重TextWrapping,类似于以下内容:

Example UI

是否存在限制最大宽度的机制(最好没有数据绑定到ActualWidth上的WrapPanel)?

1 个答案:

答案 0 :(得分:1)

感谢Rob DeLuca向我发送了一些在SO之外工作的东西:

将第二列的Auto更改为*而不是正确包装:

<WrapPanel Orientation="Horizontal">
    <!-- Other label / text box pair grids -->
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="*" /> <!-- !!! -->
        </Grid.ColumnDefinitions>
        <Label Grid.Column="0" Content="FancyLabel" Margin="1,1,1,0"/>
        <TextBox Name="FancyValue"
                 Grid.Column="1"
                 Margin="1,1,1,0"
                 Text="{Binding}"
                 MinWidth="45"
                 Width="Auto"
                 TextWrapping="Wrap"
                 AcceptsReturn="False" />
    </Grid>
</WrapPanel>