【发布时间】:2011-02-17 18:39:20
【问题描述】:
我不知道如何在其中一个单元格中使用用户控件正确管理网格列的宽度。我有一个用于窗口的 xaml:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
</Grid.ColumnDefinitions>
<Button Grid.Row="0" Content="Button" Width="100" HorizontalAlignment="Left"/>
<TextBox Grid.Row="1" />
<local:UserControl1 Grid.Row="2"
HorizontalAlignment="Left" VerticalAlignment="Top"/>
</Grid>
并且用户控件是一个绘图集,可以根据需要进行拉伸:
<UserControl x:Class="WpfApplication1.UserControl1"
Height="auto" Width="auto">
<Grid Background="Aqua">
<Path Fill="Coral" Stroke="Black" StrokeThickness="1"
Stretch="Uniform"
HorizontalAlignment="Left" VerticalAlignment="Top">
<Path.Data>
<RectangleGeometry Rect="40,20, 140,30" RadiusX="10" RadiusY="10" />
</Path.Data>
</Path>
</Grid>
</UserControl>
为了帮助我将用户控件背景设置为蓝色。
我想让列的宽度忽略用户控件的“自然”大小。我的意思是我希望用户控件在列的布局期间不要确定宽度,而是将其宽度调整为列的宽度。
在示例中,最初 Grid 会将列宽设置为按钮的值,并且用户控件将使用列宽来调整自身的大小。然后,如果在文本框中输入长文本,一旦文本框开始比按钮宽,并且列也开始调整大小,用户控件将依次调整以保持与列相同的大小。
我尝试了拉伸值的组合,并且还在用户控件中使用了 MeasureOverride()。后者不起作用,因为收到的 AvalaibleSize 是 Infinity,而不是列宽。
【问题讨论】: