C#WPF如何绘制一个圆,该圆延伸到填充其父对象,并在代码中保留为一个圆
我必须在网格中画一个圆。该轴网必须按其父轴网的列/行定义所定义的高度和宽度成比例进行调整。 现在,如果我把“拉伸”,它会填满所有的空间,变成一个省略号,而我希望它是一个圆 好的,简而言之,父网格按比例进行调整 然后在例程中添加以下代码:C#WPF如何绘制一个圆,该圆延伸到填充其父对象,并在代码中保留为一个圆,c#,wpf,grid,constraints,ellipse,C#,Wpf,Grid,Constraints,Ellipse,我必须在网格中画一个圆。该轴网必须按其父轴网的列/行定义所定义的高度和宽度成比例进行调整。 现在,如果我把“拉伸”,它会填满所有的空间,变成一个省略号,而我希望它是一个圆 好的,简而言之,父网格按比例进行调整 然后在例程中添加以下代码: public void RadialPercentage(Grid grd ) { Ellipse elpExt = new Ellipse(); elpExt.Stroke = Brushes.Green; elpExt.Stroke
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如何将
宽度
绑定到椭圆的实际高度
,并将水平对齐
设置到中心
?大概是这样的:
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);
如何将
宽度
绑定到椭圆的实际高度
,并将水平对齐
设置为中心
?大概是这样的:
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);
每次调整父网格的大小时,您都可以更新椭圆的大小 您应该将
大小更改事件添加到网格中。XAML示例:
<Grid Name = "MyGrid"
SizeChanged = "MyGridSizeChanged">
<!-- rows and columns definitions -->
<Ellipse Name = "MyEllipse"
Grid.Row = "i"
Grid.Column = "j" />
</Grid>
每次调整父网格的大小时,您都可以更新椭圆的大小
您应该将大小更改事件添加到网格中。XAML示例:
<Grid Name = "MyGrid"
SizeChanged = "MyGridSizeChanged">
<!-- rows and columns definitions -->
<Ellipse Name = "MyEllipse"
Grid.Row = "i"
Grid.Column = "j" />
</Grid>
是的,理论上可能是这样,但我的情况不是这样。非常感谢马克西姆@elgonzo那么我的解决方案就行不通了。但是,如果水平对齐
或垂直对齐
是中心对齐
,则使用拉伸。均匀对齐将不起作用,因此它也不是通用解决方案。确实,将形状居中会干扰(所需)尺寸计算:(让我看看我是否能编出一些纯粹用XAML就能完成的简单的东西…@elgonzo是的,不幸的是,真正的WPF应用程序包含很多值转换器、多重绑定、触发器、事件魔法、代码隐藏和其他“有趣”的东西,这些东西只有编写这些东西的人才能理解。至少第一个月:)嗯,一年后,人们会忘记一半关于所有的转换器、行为和其他书写和使用的东西:)。。。关于我试图找到一种没有代码隐藏的方法;我放弃了。我想我可以用RenderTransforms和RenderTransformorMorigin做点什么,但您仍然需要做一些数学计算:(是的,理论上可能是这样,但在我的情况下不是这样。非常感谢Maxim!!@elgonzo,那么我的解决方案将不起作用。但是使用Stretch.Uniform
在水平对齐
或垂直对齐
是居中
的情况下将不起作用。确实,居中形状会产生干扰。)(所需的)大小计算:(让我看看我是否能编出一些纯粹用XAML就能完成且简单的东西…@elgonzo是的,不幸的是,真正的WPF应用程序包含很多值转换器、多重绑定、触发器、事件魔法、代码隐藏和其他“乐趣”只有那些写了这些东西的人才能明白的事情。至少第一个月:)好吧,一年后,人们会忘记一半关于所有的转换器、行为和其他书写和使用的东西:)…关于我试图找到一种没有代码隐藏的方法,我放弃了。我想我可以用RenderTransforms和RenderTransformorMorigin做些什么,但你仍然需要做一些数学计算:(虽然这可能回答了作者的问题,但它缺少一些解释性词语和/或文档链接。如果没有一些短语,原始代码片段不会有很大帮助。您也可能会发现它们非常有用。请编辑您的答案。虽然这可能回答了作者的问题,但它缺少一些解释性词语和/或文档链接。Ra如果代码片段周围没有一些短语,它们就没有多大帮助。您可能也会发现它们非常有用。请编辑您的答案。