это мое первое сообщение, поэтому, пожалуйста, будьте добры: D.Перетаскивание содержимого из одной сетки-ребенка в другую
Я ищу способ, позволяющий пользователю моей программы перемещать кнопку (как изображение как backgroung, а также содержимое Grid-Children) другим Grid-Children путем перетаскивания ,
Мои кнопки создаются самой программой, основанной на базе данных в обмен на итерации:
foreach (PC_Infos item in allPcsOnThisFloor)
{
if (item != null)
{
roomToCoordinates(allPcsOnThisFloor[i].Room,out column, out row);
Button btn = new Button();
btn.Name = Name+ "_Button";
btn.Background = new ImageBrush(my icon here);
btn.Click += btn_Click;
btn.SetValue(Grid.ColumnProperty, column);
btn.SetValue(Grid.RowProperty, row);
My_Grid.Children.Add (btn);
i++;
}
else
break;
}
PC_Infos
просто класс держит Свойства: PC_Name, номер и MAC_adress ничего.
Моя Сетка:
<Grid x:Name="Grid_10" AllowDrop="True">
<Grid.Background>
<ImageBrush ImageSource="C:\Users\XXX\XXX\buildingPlan.png"/>
</Grid.Background>
<Grid.ColumnDefinitions>
<ColumnDefinition />
[...]
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
[...]
<RowDefinition />
</Grid.RowDefinitions>
</Grid>
Теперь есть способ использовать btn.*
Wich выбирает текущий постион (строка и столбец), когда потащил, а другой btn.*
которым создает новую копию этой кнопки в сетке -Чтобы мышь в данный момент закончилась, когда мышь нажала кнопку? Или есть даже способ «переместить» кнопку от одного ребенка к другому?
BTW: Моя программа должна показывать план здания с ПК как значки (кнопки) на нем в том месте, где они актуальны. Грубое предположение берет исходный код, читая столбец «Комната» в моем db. Но комната - это не просто одно место. Кто-то работает в окне еще один у двери, это должно быть отмечено пользователем (с перетаскиванием & drop) Я использую WPF-приложение в VS'13 с C# и .Net 4.5.1.
PS: Если есть кто-нибудь, кто говорит: «Почему сетка и почему адские кнопки? : D: Когда пользователь нажимает на значок, появится новое окно с системным значением, например OS, RAM, CPU .... Но я открыт для любой реализации. Я так долго не программировал, поэтому я, возможно, не знаю, как это сделать.
Надеется, что вы получите мой вопрос: D Спасибо за вашу помощь. Если у вас возникли вопросы, обращайтесь;)
Спасибо за второй абзац: D Теперь я использую холст, который (как вы уже отметили) гораздо более гибкий и простой, а вместо кнопок я использую теперь прямоугольники. С помощью «MyCanvas_MouseDown», «MyCanvas_MouseMove» и «MyCanvas_MouseMove» ActionHandlers и глобальной переменной _DragInProgress_ я могу обрабатывать Movements. Когда вызывается «MouseDown», код получает прямоугольник подслоя и перерисовывает его во время «MouseMove» с помощью deltaX и deltaY мыши, так как нажатие любой кнопки мыши вниз. –
Извините за то, что вы не использовали свой код или так, как вы бы это сделали, но посмотрите на PS моего кискана. Я редко отношусь к программированию, и, честно говоря, я даже не понимаю каждый бит вашего кода. Но ты дал мне новое направление. –
Рад, что это могло бы помочь. Если вы работаете в WPF, вам определенно следует следить за привязкой и шаблонами. – xum59