Я новичок в WPF. Я добавляю Rectangle один за другим на холсте при нажатии кнопки. Когда я устанавливаю Height of Specific Rectangle из TextBox. Он перекрывается в Child Rectangle.Как перемещать прямоугольник рядом с измененным родительским прямоугольником в WPF с помощью C#?
Например :.Когда есть 3 Прямоугольники с Height=100
, Width=200
& когда я установил Высота Second Rectangle to 150
. то ребенок Rectangle
должен появиться после второго прямоугольника & не должен перекрывать третий прямоугольник. Является ли это возможным?
static int val=0;
List<UIElement> itemstoremove = new List<UIElement>();
private void BtnAdd_Click(object sender, RoutedEventArgs e)
{
int heigt = 0;
int wegt = 0;
if (!string.IsNullOrEmpty(txtHeight.Text) && !string.IsNullOrEmpty(txtWidth.Text))
{
heigt = int.Parse(txtHeight.Text);
wegt = int.Parse(txtWidth.Text);
}
rect = new Rectangle();
rect.Stroke = Brushes.Red;
rect.StrokeThickness = 2;
rect.Height = heigt;
rect.Width = wegt;
Canvas.SetLeft(rect, 10);
Canvas.SetTop(rect, (rect.Height) * val);
rect.Tag = val;
canvasboard.Children.Add(rect);
val = val + 1;
//canvasboard is Canvas object
foreach (UIElement ui in canvasboard.Children)
{
if (ui.GetType() == typeof(Rectangle))
{
itemstoremove.Add(ui);
}
}
}
для изменения высоты & Ширина:
private void BtnModify_Click(object sender, RoutedEventArgs e)
{
int heigt = 0;
int wegt = 0;
if (!string.IsNullOrEmpty(txtHeight.Text) && !string.IsNullOrEmpty(txtWidth.Text))
{
heigt = int.Parse(txtHeight.Text);
wegt = int.Parse(txtWidth.Text);
}
Rectangle rectToRemove;
foreach (UIElement ui in itemstoremove)
{
if (ui.GetType() == typeof(Rectangle) && ((Rectangle)ui).Tag.ToString() == txtModifyRect.Text)
{
rectToRemove = ui as Rectangle;
//itemstoremove.Remove(rectToRemove);
rectToRemove.Height = heigt;
rectToRemove.Width = wegt;
//canvasboard.Children.Remove(rectToRemove);
break;
}
}
}
Это прекрасно работает. Просто я хочу предотвратить перекрытие Rectangle
друг на друга и должен появляться один за другим с автоматической настройкой.
Помогите оценить!
ли вы имеете в виду я должен добавить прямоугольник в WrapPanel? Я новичок в этом, так что ..! –
Это очень хорошее предложение, но автор хотел поместить их под другой, по крайней мере, я думаю, что он хотел этого, увидев «Canvas.SetLeft (rect, 10); Canvas.SetTop (rect, (rect.Height) * val); '.. – quetzalcoatl
@SHEKHARSHETE: Да, он точно это имел в виду. WrapPanel будет контейнером для ваших Rectangles, а затем Rectangles будут компоновать себя так же, как текст на HTML-странице: плотно до тех пор, пока осталось место, а затем оберните «новую строку». – quetzalcoatl