У меня есть окно с сеткой, которая имеет 2 столбца. Первый столбец содержит UserControl, а второй содержит основной макет приложения. UserControl имеет строку заголовка, которую пользователь должен иметь возможность свободно перемещать и перемещать элемент управления. Если пользователь хочет, он может перетащить пользовательский элемент управления назад к левой границе главного окна, и если элемент управления находится в пределах, скажем, 10 ipxels, он должен цепляться за границу, как магниты.
Пока у меня есть это для UserControl:
private Point mousePosition;
private TranslateTransform tt;
private void titleBar_OnPreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed)
{
mousePosition = e.GetPosition(null);
if (tt.X < 10)
{
tt.X = 10;
}
if (tt.Y < 10)
{
tt.Y = 10;
}
this.RenderTransform = tt;
var Grid = TreeHelper.FindParent<Grid>(this);
Grid.ColumnDefinitions[0].Width = new GridLength(0);
Grid.Children.Remove(this);
this.Height = 1000;
this.Width = 400;
}
}
private void TitleBar_OnPreviewMouseMove(object sender, MouseEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed)
{
tt.X += e.GetPosition(null).X - mousePosition.X;
tt.Y += e.GetPosition(null).Y - mousePosition.Y;
mousePosition = e.GetPosition(null);
if (tt.X < 10)
{
tt.X = 0;
}
if (tt.Y < 10)
{
tt.Y = 0;
}
this.RenderTransform = tt;
}
}
Перетаскивание работало, так сказать, но удаление управления из сетки не работает. Я удаляю элемент управления из сетки, потому что когда элемент перетаскивается, я хочу, чтобы остальная часть макета занимала все окно.
Может ли кто-нибудь помочь мне с этим?
Спасибо.
PS Я не могу использовать сторонние пакеты и т. Д. c.