动态调整大小控件但不允许适合内容

时间:2010-08-18 14:55:46

标签: silverlight

我在解决如何从Silverlight中的WinForms实现“左右锚”属性时遇到问题。

以下是显示我的问题的XAML:

        <Grid Width="400" >
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"  />
               <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>

             <TextBlock Grid.Column="0" Text="Some label" />
             <TextBox Grid.Column="1" />
         <Grid>

我希望标签在左侧,而TextBox在右侧填充Grid。 在初始负载上,就是这样。 但是,如果我在TextBox中输入一个很长的文字,那么它会自行调整大小以适应其内容并变得比Grid更大。

是否可以阻止TextBox调整自身大小,并使其占用尽可能多的空间,就像在WinForms中左右设置锚一样?

也许有一个简单的属性设置我完全错过了。

编辑:道歉,我错过了XAML中的一个关键元素(Grid.Column=位):(

我知道SL的尺寸属性(StarAutoPixel)。 我的错误使我不清楚我想要实现的目标。

在更正后的示例中,TextBox将填充Grid,但输入很长的文字会使其超出Grid的宽度。

干杯。

2 个答案:

答案 0 :(得分:0)

除非我误解你的问题,否则你需要做的就是摆脱<ColumnDefinition Width="Auto" />。您的TextBoxTextBlock位于Grid的第一列,即设置为自动。如果你摆脱了第一列定义,它们将在星形列中填充整个区域,但不允许它们调整大小到其内容。

修改

您是否尝试过设置HorizontalAlignment="Stretch" VerticalAlignment="Stretch" TextBox?这应该会导致TextBox使用固定大小而不会根据内容调整大小。

答案 1 :(得分:0)

在Silverlight中,列和行定义是:

  • 像素 - 表示“让我这么大”
  • 自动 - 表示“调整大小以适合该列/行中最大的子对象”和
  • 明星 - 意味着“在Pixel和Auto取得他们的份额后,给我分享其余部分”。

默认情况下,如果未指定这些,则为Star。

“Star”使用仅与其他星列/行相关且不具有绝对值的数字。具有1 *和2 *的两列与1000 *和2000 *相同。基本上,它们会占用任何像素和自动列/行后剩下的1/3和2 / 3rds。

根据另一个答案,如果您希望固定宽度是网格的百分比,则需要星形列。不是自动列,它会调整大小以适应您发现的增长文本框。