Я не могу понять, как правильно управлять шириной столбца сетки с помощью пользовательского элемента управления в одной из его ячеек. У меня есть этот 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, а не ширине столбца.