1

我正在使用 WPF 并且在动态/以编程方式将椭圆添加到我的网格时遇到了麻烦。

我在 myGrid 中动态分配和放置省略号。问题是椭圆上的位置没有改变。我正在使用 Canvas.SetLeft 和 SetTop,但椭圆似乎仍然卡住了。

这是动态分配的代码:

{
...

       Ellipse el = new Ellipse();
                    RadialGradientBrush b = new RadialGradientBrush();
                    b.RadiusX = r * 10.0f;
                    b.RadiusY = r * 10.0f;
                    b.GradientOrigin = new Point(0.5f, 0.5f);
                    b.GradientOrigin = new Point(0.5f, 0.5f);
                    b.GradientStops.Add(new GradientStop(Colors.Green, 0.0));
                    b.GradientStops.Add(new GradientStop(Colors.Blue, 1.0));
                    el.Width = 5.0f + r * 20.0f;
                    el.Height = 5.0f + r * 20.0f;
                    el.Stroke = b;
                    SetEllipsePosition(el, p);
 this.myGrid.Children.Add(el);

...


}
        private void SetEllipsePosition(FrameworkElement ellipse, Point j)
        {
            Canvas.SetLeft(ellipse, j.X);
            Canvas.SetTop(ellipse, j.Y);
        }





                    <Grid Height="480" Name="myGrid" Width="640">
                        <GroupBox Header="Pattern" Height="117" HorizontalAlignment="Left" Margin="10,564,0,0" Name="groupBox1" VerticalAlignment="Top" Width="238"></GroupBox>

                        <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="33,30,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click_1" />
                        <Grid Margin="6,507,408,-121">
                            <RadioButton Content="Lines" Height="16" HorizontalAlignment="Left" Margin="15,18,0,0" Name="rbLines" VerticalAlignment="Top" GroupName="RenderStyles" />
                            <RadioButton Content="Circles" Height="16" HorizontalAlignment="Left" Margin="15,49,0,0" Name="rbCircles" VerticalAlignment="Top" GroupName="RenderStyles" />
                        </Grid>
                    </Grid>
4

2 回答 2

3

问题是您正在使用 Grid 但设置 Canvas 属性,您可以将 Canvas 添加到 Grid 并在 Canvas 上绘制椭圆(将它们添加到 Canvases 子级),然后它就可以工作了。

或者您可以使用椭圆的 Margin 属性来设置它在 Grid 上的位置

于 2011-12-11T21:19:20.000 回答
1

Canvas.Left 和 Canvas.Top 是附加属性:仅当您的 UI 元素将包含在 Canvas 中时才设置它们;并且只有在 Canvas 上时才会使用这些属性(由 Canvas 布局管理器)。与来自 Grid 的附加属性相同(例如 Grid.Column 告诉 Grid 父级 UI 元素“想要”在哪一列),Panel(Panel.ZIndex 告诉 Panel 父级 UI 元素应该放在哪个 z 索引处), ETC。

于 2011-12-12T01:51:23.530 回答