Projekt-Anfragen: Tel: 07022/9319004 info@CodeDocu.de Software Entwicklung in C# WPF Asp.Net Core Vba Excel Word SQL-Server EF Linq, UWP Net
#

WPF: Drag Drop Beispiel

 

Das folgende C# Code Beispiel zeigt die einfache Erstellung eines Drag und Drop Funktion in WPF

Im diesem Beispiel wird ein rechteckiges Planungs-Feld (WPF Button) in ein Planungskalender gezogen (WPF Border).

Mit einem WPF Drag-und-Drop Vorgang können beliebige Daten zur Laufzeit übertragen werden.

Beim Erstellen eines Drag-Vorgangs werden beim Beginn alle frei definierbaren Informationen in ein DragObject gelegt.

Diese frei definierten Informationen können dann beim Ziel wie bei einem Array vom Drag-Object herausgelesen werden.

 

 

Programmierung Drag_Drop:

 

Drag-Element

Das WPF-Button Element, welches gezogen werden soll, benötigt ein einen .PreviewMouseLeftButtonDown Event

Dieser kann in Xaml als Event hinzugefügt werden oder wie hier zur Laufzeit wie hier an eine Event-Methode Start_Drag_Event.

btnMitarbeiter_Schicht.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(Start_Drag_Event);

 

 

Drag-Ziel

Das Element, welches auf ein Drag-Vorgang regieren soll benötigt dann die Eigenschaft .AllowDrop=true und den .Drop event

cellBorder.AllowDrop = true;

cellBorder.Drop += new DragEventHandler(Target_Border_Drop);

 

 

Beim Start des Drag-Vorgangs wird dann ein DragObject erstellt und dieses Object wird dann mit allen möglichen Daten beladen

    //< set_dragData >

    //*set informations to the dragged object

    DataObject dataObj = new DataObject();

    dataObj.SetData("Name", sName);

    dataObj.SetData("Farbe", sColor);

    dataObj.SetData("IDMitarbeiter", IDMitarbeiter);

    //</ set_dragData >

 

    //< start_drag >

    //*shows drag moving icon until drops

    DragDrop.DoDragDrop(button, dataObj, DragDropEffects.Move);

    //</ start_drag >

 

 

Drop-Event:

Beim Drop-Event wird dann direkt das DragObject ausgelesen

//< values_from_dragger >

    String sColor = (String)e.Data.GetData("Farbe");

    Color color = (ColorColorConverter.ConvertFromString(sColor);

    String sName = (String)e.Data.GetData("Name");

    int IDMitarbeiter = (int) e.Data.GetData("IDMitarbeiter");

    //</ values_from_dragger >

 

 

 

 

C# Code Drag und Drop

 

#region Drag_Drop

//=============< region: Drag_Drop >=============

private void Start_Drag_Event(object sender, MouseButtonEventArgs e)

{

    //---------------------< Start_Drag_Event() >---------------------

    //< init >

    //*get values from drag_button_start

    Button button = (Button)sender;

    string sName = (string) button.Content;

    string sColor = button.Background.ToString();

    string sControlname = button.Name;

    int IDMitarbeiter = clsStrings.get_Key_Value_from_String_as_Integer(sControlname, "IDMitarbeiter");

    //</ init >

 

    //< set_dragData >

    //*set informations to the dragged object

    DataObject dataObj = new DataObject();

    dataObj.SetData("Name", sName);

    dataObj.SetData("Farbe", sColor);

    dataObj.SetData("IDMitarbeiter", IDMitarbeiter);

    //</ set_dragData >

 

    //< start_drag >

    //*shows drag moving icon until drops

    DragDrop.DoDragDrop(button, dataObj, DragDropEffects.Move);

    //</ start_drag >

 

    //---------------------</ Start_Drag_Event() >---------------------

}

 

private void Target_Border_Drop(object sender, DragEventArgs e)

{

    //---------------------< Target_Border_Drop() >---------------------

    //*event when drop on target control 

    Border target_Control = (Border)sender;

 

    //< values_from_dragger >

    String sColor = (String)e.Data.GetData("Farbe");

    Color color = (ColorColorConverter.ConvertFromString(sColor);

    String sName = (String)e.Data.GetData("Name");

    int IDMitarbeiter = (int) e.Data.GetData("IDMitarbeiter");

    //</ values_from_dragger >

 

 

 

    //--< save_as_DatePlan_Entry >--

    string sPanelName = target_Control.Name;

    int IDMaschine = clsStrings.get_Key_Value_from_String_as_Integer(sPanelName , "IDMaschine");

    int IDSchicht = clsStrings.get_Key_Value_from_String_as_Integer(sPanelName, "IDSchicht");

    int PosNrBesetzung = clsStrings.get_Key_Value_from_String_as_Integer(sPanelName, "PosNrBesetzung");

    DateTime DatePlan = clsStrings.get_Key_Value_from_String_as_Date(sPanelName, "DatePlan");

 

    //< save >

    //eintrag in die Datenbank

    clsSchichtplan.erstelle_Schichtplan_Eintrag(IDMaschine, IDSchicht, IDMitarbeiter, DatePlan, PosNrBesetzung);

    //</ save >

    //--</ save_as_DatePlan_Entry >--

 

 

    //< show_Button >

    //*insert child_button with name

    Button child_Button = new Button();

    child_Button.Background = new SolidColorBrush(color);

    child_Button.Content = sName;

    child_Button.Name = "";

    target_Control.Child = child_Button;

    //</ show_Button >

    //---------------------</ Target_Border_Drop() >---------------------

}

 

//=============</ region: Drag_Drop >=============

#endregion /Drag_Drop

 

 

 

 

Zur Vollständigkeit des Beispiels:

 

Drag-Quelle

Hier der Code zum erstellen eines Buttons während der Laufzeit.

//--< cellButton_Mitarbeiter_erstellen >--

 

Button btnMitarbeiter_Schicht = new Button();

btnMitarbeiter_Schicht.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString(sColor_SchichtGruppe));

btnMitarbeiter_Schicht.Content = mitarbeiter.Nachname;

btnMitarbeiter_Schicht.Name = "button_IDMitarbeiter_" + mitarbeiter.IDMitarbeiter;

btnMitarbeiter_Schicht.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(Start_Drag_Event);

 

Set_Position_of_Element_in_a_Grid(btnMitarbeiter_Schicht, rowNr, iColNr);

Grid_Mitarbeiter.Children.Add(btnMitarbeiter_Schicht);

//--</ cellButton_Mitarbeiter_erstellen >--

 

 

 

Drag-Empfänger

//-< panel >-

Border cellBorder = new Border();

Color color = (Color)ColorConverter.ConvertFromString(_sColor_Cell);

cellBorder.Background = new SolidColorBrush(color);

cellBorder.Margin = new Thickness(1);

cellBorder.MouseUp += Panel_MouseUp;

 

cellBorder.AllowDrop = true;

cellBorder.Drop += new DragEventHandler(Target_Border_Drop);

//--< Cell_name >--

string sCellBorder_Name = "cellBorder_IDMaschine_" + maschine.IDMaschine + "_IDSchicht_" + IDSchicht  + "_PosNrMitarbeiter_" + iMitarbeiter + "_DatePlan_" + sDatePlan;

cellBorder.Name = sCellBorder_Name;  

 

//--</ Cell_name >--

Set_Position_of_Element_in_a_Grid(cellBorder, rowNr, iColNr);

Grid_Plan.Children.Add(cellBorder);

//-</ panel >-

 

 

Mobile
»
WPF Daten in der Datenbank speichern
»
WPF: Explorer mit Pfad öffnen
»
WPF Documentviewer: Suchfeld und Toolbar ausblenden
»
PF Documentviewer Druckvorschau beim Drucken
»
WPF: eine Seite in Druckvorschau anzeigen und drucken
»
WPF: Drag Drop Beispiel
»
Popup Window für Mitarbeiter Auswahl
»
WPF : aktuelle Kalender Woche berechnen
»
Text aus PDF auslesen in C# mit iTextSharp
»
Send Emails mit WPF

.

Jobs, Projekte, Angebote für Freiberufler, Selbstständig an Info@CodeDocu.de