2010-08-18 47 views
1

我遇到了问题,如何在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的宽度。

干杯。

回答

0

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

编辑

你试过你TextBox设置HorizontalAlignment="Stretch" VerticalAlignment="Stretch"?这应该会导致TextBox使用固定大小,而不是基于内容调整大小。

+0

对不起,我在我的XAML中犯了一个错误,所以我的问题并不清楚。现在已经纠正了。 – R4cOON 2010-08-19 08:46:00

+0

除非我误认为是默认设置。我确实希望TextBox填充网格列,这就是发生了什么。但我不希望它超出列的宽度。 我试着在SizeChanged事件上挂钩并做一些事情,但不幸的是第一次调整是根据绑定的内容完成的:( – R4cOON 2010-08-20 06:12:47

0

在Silverlight中列和行定义或者是:

  • 像素 - 意思是“让我这个确切的大小”
  • 自动 - 意思是“调整大小以适应最大的子对象在山坳/ row“和
  • Star - 意思是”在Pixel和Auto获得份额之后给我一部分剩余部分“。

如果没有指定它们,则默认为Star。

“星号”使用的数字只与其他星列/行有关,并且没有绝对值。两列1 *和2 *与1000 *和2000 *相同。基本上他们会在任何像素和自动列/行之后留下任何空间的1/3和2/3rds。

根据其他答案,如果你想要一个固定的宽度,这是你想要一个星列的网格的百分比。不是一个自动列,它会调整大小以适应不断增长的文本框。

+0

在我看来,如前所述,将星号设置为不设置固定大小,但是因此输入一些长文本将调整框的大小(我不想),并且绑定到长文本也会做同样的事情。 – R4cOON 2010-08-19 08:44:51