Динамическое добавление и перемещение эллипсов с использованием WPF - PullRequest
0 голосов
/ 12 декабря 2011

Я использую 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>

Ответы [ 2 ]

2 голосов
/ 12 декабря 2011

Проблема в том, что вы используете сетку, но устанавливая свойства холста, вы можете добавить холст в сетку и нарисовать эллипсы на холсте (добавить их в дочерние элементы холста), и тогда это сработает.

Или вы можете использовать свойство Margin вашего эллипса, чтобы установить его положение в сетке

1 голос
/ 12 декабря 2011

Canvas.Left и Canvas.Top являются вложенными свойствами: вы устанавливаете их, только если ваш элемент пользовательского интерфейса будет содержаться в Canvas; и только когда он находится на Canvas, эти свойства будут использоваться (менеджером раскладки Canvas). То же самое с вложенными свойствами из Grid (например, Grid.Column, чтобы указать родителю Grid, в каком столбце «хочет» быть элемент UI), Panel (Panel.ZIndex, чтобы сообщить родителю Panel, по какому z-индексу должен быть помещен элемент UI). ) и т. д.

...