我在解决如何从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的尺寸属性(Star
,Auto
,Pixel
)。
我的错误使我不清楚我想要实现的目标。
在更正后的示例中,TextBox
将填充Grid
,但输入很长的文字会使其超出Grid
的宽度。
干杯。
答案 0 :(得分:0)
除非我误解你的问题,否则你需要做的就是摆脱<ColumnDefinition Width="Auto" />
。您的TextBox
和TextBlock
位于Grid
的第一列,即设置为自动。如果你摆脱了第一列定义,它们将在星形列中填充整个区域,但不允许它们调整大小到其内容。
修改强>
您是否尝试过设置HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
TextBox
?这应该会导致TextBox
使用固定大小而不会根据内容调整大小。
答案 1 :(得分:0)
在Silverlight中,列和行定义是:
默认情况下,如果未指定这些,则为Star。
“Star”使用仅与其他星列/行相关且不具有绝对值的数字。具有1 *和2 *的两列与1000 *和2000 *相同。基本上,它们会占用任何像素和自动列/行后剩下的1/3和2 / 3rds。
根据另一个答案,如果您希望固定宽度是网格的百分比,则需要星形列。不是自动列,它会调整大小以适应您发现的增长文本框。