Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#WPF如何绘制一个圆,该圆延伸到填充其父对象,并在代码中保留为一个圆_C#_Wpf_Grid_Constraints_Ellipse - Fatal编程技术网

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如果代码片段周围没有一些短语,它们就没有多大帮助。您可能也会发现它们非常有用。请编辑您的答案。