Новое решение / обходной путь.UserControl может оставаться как есть, мы оставим масштабирование родительскому контейнеру.
Мы не можем выполнить Min (Width, Height) только с помощью UserControl, потому что, если мы установим для него Height, тогда родительский контейнер не будет масштабировать его по вертикали, и то же самое касается Width.Если мы пытаемся манипулировать ими, то возникают ситуации, когда мы заканчиваем бесконечный цикл изменения ширины / высоты.
Нам нужен еще один скрытый элемент управления в том же пространстве, который полностью заполняет его и может сообщать нам, каковы его ширина и высота при каждом изменении.Тогда мы можем использовать решение Math.Min (Ширина, Высота).Что-то вроде этого.Обратите внимание, как оба элемента управления находятся в Grid.Row = "1" и Grid.Column = "1".
<Rectangle Name="availableSpace"
SizeChanged="availableSpace_SizeChanged"
Fill="Transparent"
Grid.Row="1"
Grid.Column="1"/>
<myLib:UserControl1 x:Name="userControl11"
Grid.Row="1"
Grid.Column="1"
HorizontalAlignment="Left"
VerticalAlignment="Top"/>
А затем в доступномSpace_SizeChanged EventHandler
private void availableSpace_SizeChanged(object sender, SizeChangedEventArgs e)
{
double minValue = Math.Min(availableSpace.ActualWidth, availableSpace.ActualHeight);
userControl1.Width = minValue;
userControl1.Height = minValue;
}
Теперь у нас есть 1Соотношение UserControl: 1 и масштабируется по вертикали и горизонтали