Laden...

Ein Border von einen Template in ein anders Template ziehen(Drag and Drop)

Letzter Beitrag vor einem Jahr 9 Posts 615 Views
Ein Border von einen Template in ein anders Template ziehen(Drag and Drop)

ich versuche das ich ein Border ziehen kann von einen Template ins andere. Wenn ich es ohne Template mache funktioniert es.

private void TextBox_MouseMove(object sender, MouseEventArgs e)
{
    var canvas = sender as Border;

    base.OnMouseMove(e);
    if (e.LeftButton == MouseButtonState.Pressed)
    {
        DragDrop.DoDragDrop(this, canvas, DragDropEffects.Move);
    }
}

private void Stackpanel_Drop(object sender, DragEventArgs e)
{
    var obj = e.Data.GetData(typeof(Border)) as Border;

    ((StackPanel)(obj.Parent)).Children.Remove(obj);

    ((StackPanel)sender).Children.Add(obj);
    ((StackPanel)sender).UpdateLayout();
}
<StackPanel Grid.Column="2" Grid.Row="1" HorizontalAlignment="Center" Background="Transparent" AllowDrop="True" Drop="Stackpanel_Drop" >
    <StackPanel.Resources>
        <Style TargetType="{x:Type Border}">
            <Setter Property="Margin" Value="0,10,0,0"/>
        </Style>
    </StackPanel.Resources>
    <ItemsControl ItemsSource="{Binding FinishedTasksList}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapPanel Orientation="Horizontal" />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Border Background="LightGray" Height="85" Width="250" MouseMove="TextBox_MouseMove">
                    <TextBlock Text="{Binding Details}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                </Border>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</StackPanel>

Von diesem Xaml-Code gibt es 2 Weitere die Ähnlich sind

wenn ich es nur so z.b. 3 Borders anlege und sie verschiebe funktioniert es

denke bei StackPanel_Drop muss was angepasst werden. Einiges Probiert, aber keine Lösung gefunden

ja stimmt obj.parent ist null. Hättest du eventuell eine andre Idee wie ich den Border dann von jetzigen Template löschen kann und im anderen speichern kann?

Schau mal, ob TemplatedParent das richtige Objekt ist?

Wenn das klappt, dann kannst du ja nacheinander beide abfragen - und somit normale und Template-Objekte behandeln.

liefert leider auch null oder ich hab einen Logikfehler

Dann überprüfe mal im Debugger, ob die Variable canvas diese Eigenschaften gesetzt hat.

dort ist auch null bei Parent 😃

hab es jetzt mal so gemacht, bis ich dann zum gesuchten Parent komme.

 var parent = VisualTreeHelper.GetParent(obj) as UIElement;
 var parent2 = VisualTreeHelper.GetParent(parent) as UIElement;
 var parent3 = VisualTreeHelper.GetParent(parent2) as UIElement;
 var parent4 = VisualTreeHelper.GetParent(parent3) as UIElement;
 var parent5 = VisualTreeHelper.GetParent(parent4) as UIElement;
 var parent6 = VisualTreeHelper.GetParent(parent5) as UIElement;

 ((StackPanel)parent6).Children.Remove(obj);

aber das remove funktioniert nicht. Es kommt keine Fehlermeldung, aber es entfernt es nicht.

Du kannst ja auch nicht das obj aus der Children-Collection löschen, wenn es kein direktes Child davon ist.

Du müßtest es also direkt aus parent löschen oder aber den gesamten Tree, d.h. parent5 aus parent6 löschen.

ok denke jetzt sollte es gehen thx