[英]C# WPF how to draw a circle which extends to fill its parent and remains a circle in code behind
我必須在網格中畫一個圓。 該網格必須按比例適應其父網格的“列/行”定義所定義的高度和寬度。 現在,如果我拉伸,它將填充所有空間並變成省略號,而我希望它是一個圓。
然后在例程中添加以下代碼:
public void RadialPercentage(Grid grd )
{
Ellipse elpExt = new Ellipse();
elpExt.Stroke = Brushes.Green;
elpExt.StrokeThickness = 4;
//elpExt.Margin = new Thickness(0);
//elpExt.HorizontalAlignment = HorizontalAlignment.Center;
elpExt.VerticalAlignment = VerticalAlignment.Stretch;
grd.Children.Add(elpExt);
Ellipse elpInt = new Ellipse();
elpInt.Stroke = Brushes.Blue;
elpInt.StrokeThickness = 4;
elpInt.Margin = new Thickness(20);
//elpInt.Width = elpInt.Height = dim-20;
//elpInt.HorizontalAlignment = HorizontalAlignment.Center;
elpInt.VerticalAlignment = VerticalAlignment.Stretch;
grd.Children.Add(elpInt);
return;
}
但是效果如下:
因此即使我只放置垂直約束而不是水平約束,它也會在垂直和水平方向上拉伸。 如果將其設置為居中,則橢圓會崩潰。
為了解決該問題,即使我不確定這樣做是否正確,我也嘗試查看父網格的權重/高度,但顯然這些值和實際值都設置為零。
感謝您對Patrick的幫助
如何將Width
的綁定設置為橢圓的ActualHeight
並將HorizontalAlignment
設置為Center
呢? 像這樣:
var ellipse = new Ellipse();
var binding = new Binding(Ellipse.ActualHeightProperty.Name)
{
RelativeSource = new RelativeSource(RelativeSourceMode.Self),
Mode = BindingMode.OneWay
};
ellipse.VerticalAlignment = VerticalAlignment.Stretch;
ellipse.HorizontalAlignment = HorizontalAlignment.Center;
BindingOperations.SetBinding(ellipse, Ellipse.WidthProperty, binding);
每次調整父Grid
的大小時,您都可以更新Ellipse
大小。
您應該將SizeChanged
Event
添加到Grid
中。 XAML示例:
<Grid Name = "MyGrid"
SizeChanged = "MyGridSizeChanged">
<!-- rows and columns definitions -->
<Ellipse Name = "MyEllipse"
Grid.Row = "i"
Grid.Column = "j" />
</Grid>
現在,每次調整Grid
大小時,都會執行MyGridSizeChanged
函數。 您應該在其中添加代碼,該代碼將Ellipse
大小設置為等於所包含單元格的最小邊。 C#示例:
void MyGridSizeChanged(object sender, SizeChangedEventArgs e) {
if (sender is Grid myGrid) {
var cellHeight = myGrid.RowDefinitions[Grid.GetRow(MyEllipse)].ActualHeight;
var cellWidth = myGrid.ColumnDefinitions[Grid.GetColumn(MyEllipse)].ActualWidth;
var newSize = Math.Min(cellHeight, cellWidth);
MyEllipse.Height = newSize;
MyEllipse.Width = newSize;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.